{
 "cells": [
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:28:32.859181Z",
     "iopub.status.busy": "2025-01-23T07:28:32.858658Z",
     "iopub.status.idle": "2025-01-23T07:28:38.315317Z",
     "shell.execute_reply": "2025-01-23T07:28:38.314782Z",
     "shell.execute_reply.started": "2025-01-23T07:28:32.859143Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:26:49.847267Z",
     "start_time": "2025-03-13T11:26:39.418344Z"
    }
   },
   "source": [
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "from tqdm.auto import tqdm\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "print(sys.version_info)\n",
    "for module in mpl, np, pd, sklearn, torch:\n",
    "    print(module.__name__, module.__version__)\n",
    "    \n",
    "device = torch.device(\"cuda:0\") if torch.cuda.is_available() else torch.device(\"cpu\")\n",
    "print(device)\n",
    "\n",
    "seed = 42\n",
    "torch.manual_seed(seed)\n",
    "torch.cuda.manual_seed_all(seed)\n"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sys.version_info(major=3, minor=12, micro=3, releaselevel='final', serial=0)\n",
      "matplotlib 3.10.0\n",
      "numpy 1.26.4\n",
      "pandas 2.2.3\n",
      "sklearn 1.6.1\n",
      "torch 2.6.0+cu118\n",
      "cuda:0\n"
     ]
    }
   ],
   "execution_count": 1
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 准备数据"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:29:26.714983Z",
     "iopub.status.busy": "2025-01-23T07:29:26.714605Z",
     "iopub.status.idle": "2025-01-23T07:29:54.558733Z",
     "shell.execute_reply": "2025-01-23T07:29:54.558123Z",
     "shell.execute_reply.started": "2025-01-23T07:29:26.714959Z"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:28.634776Z",
     "start_time": "2025-03-13T11:26:49.848647Z"
    }
   },
   "source": [
    "!pip install tensorflow"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Looking in indexes: https://mirrors.aliyun.com/pypi/simple/\n",
      "Collecting tensorflow\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/5c/98/d145af334fd5807d6ba1ead447bf0c57a36654ea58e726d70c0d09cae913/tensorflow-2.19.0-cp312-cp312-win_amd64.whl (376.0 MB)\n",
      "     ---------------------------------------- 0.0/376.0 MB ? eta -:--:--\n",
      "     ---------------------------------------- 0.3/376.0 MB ? eta -:--:--\n",
      "     ---------------------------------------- 0.8/376.0 MB 2.8 MB/s eta 0:02:14\n",
      "     ---------------------------------------- 1.6/376.0 MB 3.0 MB/s eta 0:02:05\n",
      "     ---------------------------------------- 2.1/376.0 MB 3.3 MB/s eta 0:01:55\n",
      "     ---------------------------------------- 2.4/376.0 MB 2.6 MB/s eta 0:02:22\n",
      "     ---------------------------------------- 2.9/376.0 MB 2.6 MB/s eta 0:02:25\n",
      "     ---------------------------------------- 3.4/376.0 MB 2.7 MB/s eta 0:02:21\n",
      "     ---------------------------------------- 3.9/376.0 MB 2.6 MB/s eta 0:02:23\n",
      "      --------------------------------------- 4.7/376.0 MB 2.7 MB/s eta 0:02:18\n",
      "      --------------------------------------- 5.5/376.0 MB 2.8 MB/s eta 0:02:12\n",
      "      --------------------------------------- 6.0/376.0 MB 2.8 MB/s eta 0:02:11\n",
      "      --------------------------------------- 6.8/376.0 MB 2.9 MB/s eta 0:02:08\n",
      "      --------------------------------------- 7.6/376.0 MB 3.0 MB/s eta 0:02:04\n",
      "      --------------------------------------- 8.4/376.0 MB 3.0 MB/s eta 0:02:02\n",
      "      --------------------------------------- 9.2/376.0 MB 3.1 MB/s eta 0:02:01\n",
      "     - -------------------------------------- 9.7/376.0 MB 3.1 MB/s eta 0:02:00\n",
      "     - ------------------------------------- 10.7/376.0 MB 3.1 MB/s eta 0:01:57\n",
      "     - ------------------------------------- 11.5/376.0 MB 3.2 MB/s eta 0:01:55\n",
      "     - ------------------------------------- 12.3/376.0 MB 3.2 MB/s eta 0:01:54\n",
      "     - ------------------------------------- 12.8/376.0 MB 3.2 MB/s eta 0:01:53\n",
      "     - ------------------------------------- 13.6/376.0 MB 3.2 MB/s eta 0:01:53\n",
      "     - ------------------------------------- 14.4/376.0 MB 3.3 MB/s eta 0:01:51\n",
      "     - ------------------------------------- 15.2/376.0 MB 3.3 MB/s eta 0:01:50\n",
      "     - ------------------------------------- 15.7/376.0 MB 3.3 MB/s eta 0:01:50\n",
      "     - ------------------------------------- 16.5/376.0 MB 3.3 MB/s eta 0:01:49\n",
      "     - ------------------------------------- 17.3/376.0 MB 3.3 MB/s eta 0:01:49\n",
      "     - ------------------------------------- 18.1/376.0 MB 3.3 MB/s eta 0:01:49\n",
      "     - ------------------------------------- 18.9/376.0 MB 3.3 MB/s eta 0:01:48\n",
      "     -- ------------------------------------ 19.4/376.0 MB 3.3 MB/s eta 0:01:47\n",
      "     -- ------------------------------------ 20.2/376.0 MB 3.3 MB/s eta 0:01:48\n",
      "     -- ------------------------------------ 21.0/376.0 MB 3.3 MB/s eta 0:01:48\n",
      "     -- ------------------------------------ 21.5/376.0 MB 3.3 MB/s eta 0:01:47\n",
      "     -- ------------------------------------ 22.3/376.0 MB 3.3 MB/s eta 0:01:47\n",
      "     -- ------------------------------------ 23.1/376.0 MB 3.4 MB/s eta 0:01:46\n",
      "     -- ------------------------------------ 24.1/376.0 MB 3.4 MB/s eta 0:01:44\n",
      "     -- ------------------------------------ 24.9/376.0 MB 3.4 MB/s eta 0:01:44\n",
      "     -- ------------------------------------ 25.7/376.0 MB 3.4 MB/s eta 0:01:43\n",
      "     -- ------------------------------------ 26.5/376.0 MB 3.4 MB/s eta 0:01:43\n",
      "     -- ------------------------------------ 27.3/376.0 MB 3.4 MB/s eta 0:01:42\n",
      "     -- ------------------------------------ 27.8/376.0 MB 3.4 MB/s eta 0:01:42\n",
      "     -- ------------------------------------ 28.6/376.0 MB 3.4 MB/s eta 0:01:43\n",
      "     --- ----------------------------------- 29.1/376.0 MB 3.4 MB/s eta 0:01:43\n",
      "     --- ----------------------------------- 29.6/376.0 MB 3.4 MB/s eta 0:01:43\n",
      "     --- ----------------------------------- 30.4/376.0 MB 3.4 MB/s eta 0:01:43\n",
      "     --- ----------------------------------- 30.7/376.0 MB 3.3 MB/s eta 0:01:44\n",
      "     --- ----------------------------------- 31.5/376.0 MB 3.3 MB/s eta 0:01:43\n",
      "     --- ----------------------------------- 32.0/376.0 MB 3.3 MB/s eta 0:01:44\n",
      "     --- ----------------------------------- 32.8/376.0 MB 3.3 MB/s eta 0:01:43\n",
      "     --- ----------------------------------- 33.3/376.0 MB 3.3 MB/s eta 0:01:43\n",
      "     --- ----------------------------------- 34.1/376.0 MB 3.4 MB/s eta 0:01:43\n",
      "     --- ----------------------------------- 34.6/376.0 MB 3.3 MB/s eta 0:01:43\n",
      "     --- ----------------------------------- 35.1/376.0 MB 3.3 MB/s eta 0:01:43\n",
      "     --- ----------------------------------- 35.9/376.0 MB 3.3 MB/s eta 0:01:43\n",
      "     --- ----------------------------------- 36.7/376.0 MB 3.3 MB/s eta 0:01:43\n",
      "     --- ----------------------------------- 37.2/376.0 MB 3.3 MB/s eta 0:01:43\n",
      "     --- ----------------------------------- 38.0/376.0 MB 3.3 MB/s eta 0:01:42\n",
      "     ---- ---------------------------------- 38.8/376.0 MB 3.3 MB/s eta 0:01:42\n",
      "     ---- ---------------------------------- 39.3/376.0 MB 3.3 MB/s eta 0:01:42\n",
      "     ---- ---------------------------------- 40.1/376.0 MB 3.3 MB/s eta 0:01:41\n",
      "     ---- ---------------------------------- 40.9/376.0 MB 3.3 MB/s eta 0:01:41\n",
      "     ---- ---------------------------------- 41.7/376.0 MB 3.3 MB/s eta 0:01:41\n",
      "     ---- ---------------------------------- 42.5/376.0 MB 3.3 MB/s eta 0:01:41\n",
      "     ---- ---------------------------------- 43.3/376.0 MB 3.3 MB/s eta 0:01:40\n",
      "     ---- ---------------------------------- 44.0/376.0 MB 3.4 MB/s eta 0:01:39\n",
      "     ---- ---------------------------------- 44.8/376.0 MB 3.4 MB/s eta 0:01:39\n",
      "     ---- ---------------------------------- 45.6/376.0 MB 3.4 MB/s eta 0:01:38\n",
      "     ---- ---------------------------------- 46.4/376.0 MB 3.4 MB/s eta 0:01:38\n",
      "     ---- ---------------------------------- 47.2/376.0 MB 3.4 MB/s eta 0:01:38\n",
      "     ---- ---------------------------------- 48.0/376.0 MB 3.4 MB/s eta 0:01:37\n",
      "     ----- --------------------------------- 48.8/376.0 MB 3.4 MB/s eta 0:01:37\n",
      "     ----- --------------------------------- 49.5/376.0 MB 3.4 MB/s eta 0:01:36\n",
      "     ----- --------------------------------- 50.1/376.0 MB 3.4 MB/s eta 0:01:37\n",
      "     ----- --------------------------------- 50.6/376.0 MB 3.4 MB/s eta 0:01:37\n",
      "     ----- --------------------------------- 51.4/376.0 MB 3.4 MB/s eta 0:01:37\n",
      "     ----- --------------------------------- 52.2/376.0 MB 3.4 MB/s eta 0:01:36\n",
      "     ----- --------------------------------- 52.7/376.0 MB 3.4 MB/s eta 0:01:36\n",
      "     ----- --------------------------------- 53.2/376.0 MB 3.4 MB/s eta 0:01:36\n",
      "     ----- --------------------------------- 54.0/376.0 MB 3.4 MB/s eta 0:01:36\n",
      "     ----- --------------------------------- 54.8/376.0 MB 3.4 MB/s eta 0:01:36\n",
      "     ----- --------------------------------- 55.3/376.0 MB 3.4 MB/s eta 0:01:35\n",
      "     ----- --------------------------------- 56.4/376.0 MB 3.4 MB/s eta 0:01:35\n",
      "     ----- --------------------------------- 56.9/376.0 MB 3.4 MB/s eta 0:01:35\n",
      "     ----- --------------------------------- 57.7/376.0 MB 3.4 MB/s eta 0:01:35\n",
      "     ------ -------------------------------- 58.5/376.0 MB 3.4 MB/s eta 0:01:34\n",
      "     ------ -------------------------------- 59.2/376.0 MB 3.4 MB/s eta 0:01:34\n",
      "     ------ -------------------------------- 60.0/376.0 MB 3.4 MB/s eta 0:01:34\n",
      "     ------ -------------------------------- 60.8/376.0 MB 3.4 MB/s eta 0:01:33\n",
      "     ------ -------------------------------- 61.6/376.0 MB 3.4 MB/s eta 0:01:33\n",
      "     ------ -------------------------------- 62.1/376.0 MB 3.4 MB/s eta 0:01:33\n",
      "     ------ -------------------------------- 62.9/376.0 MB 3.4 MB/s eta 0:01:32\n",
      "     ------ -------------------------------- 63.4/376.0 MB 3.4 MB/s eta 0:01:32\n",
      "     ------ -------------------------------- 64.2/376.0 MB 3.4 MB/s eta 0:01:32\n",
      "     ------ -------------------------------- 65.3/376.0 MB 3.4 MB/s eta 0:01:32\n",
      "     ------ -------------------------------- 66.1/376.0 MB 3.4 MB/s eta 0:01:31\n",
      "     ------ -------------------------------- 66.8/376.0 MB 3.4 MB/s eta 0:01:31\n",
      "     ------ -------------------------------- 67.4/376.0 MB 3.4 MB/s eta 0:01:31\n",
      "     ------- ------------------------------- 68.2/376.0 MB 3.4 MB/s eta 0:01:31\n",
      "     ------- ------------------------------- 68.9/376.0 MB 3.4 MB/s eta 0:01:30\n",
      "     ------- ------------------------------- 70.0/376.0 MB 3.4 MB/s eta 0:01:30\n",
      "     ------- ------------------------------- 70.5/376.0 MB 3.4 MB/s eta 0:01:30\n",
      "     ------- ------------------------------- 71.6/376.0 MB 3.4 MB/s eta 0:01:29\n",
      "     ------- ------------------------------- 72.4/376.0 MB 3.4 MB/s eta 0:01:29\n",
      "     ------- ------------------------------- 72.9/376.0 MB 3.4 MB/s eta 0:01:29\n",
      "     ------- ------------------------------- 73.7/376.0 MB 3.4 MB/s eta 0:01:29\n",
      "     ------- ------------------------------- 74.2/376.0 MB 3.4 MB/s eta 0:01:29\n",
      "     ------- ------------------------------- 75.0/376.0 MB 3.4 MB/s eta 0:01:28\n",
      "     ------- ------------------------------- 75.8/376.0 MB 3.4 MB/s eta 0:01:28\n",
      "     ------- ------------------------------- 76.5/376.0 MB 3.4 MB/s eta 0:01:28\n",
      "     ------- ------------------------------- 77.1/376.0 MB 3.4 MB/s eta 0:01:28\n",
      "     -------- ------------------------------ 77.9/376.0 MB 3.4 MB/s eta 0:01:27\n",
      "     -------- ------------------------------ 78.6/376.0 MB 3.4 MB/s eta 0:01:27\n",
      "     -------- ------------------------------ 79.2/376.0 MB 3.4 MB/s eta 0:01:27\n",
      "     -------- ------------------------------ 80.2/376.0 MB 3.4 MB/s eta 0:01:26\n",
      "     -------- ------------------------------ 80.7/376.0 MB 3.4 MB/s eta 0:01:26\n",
      "     -------- ------------------------------ 81.5/376.0 MB 3.4 MB/s eta 0:01:26\n",
      "     -------- ------------------------------ 82.1/376.0 MB 3.4 MB/s eta 0:01:26\n",
      "     -------- ------------------------------ 82.8/376.0 MB 3.4 MB/s eta 0:01:26\n",
      "     -------- ------------------------------ 83.6/376.0 MB 3.4 MB/s eta 0:01:25\n",
      "     -------- ------------------------------ 84.4/376.0 MB 3.4 MB/s eta 0:01:25\n",
      "     -------- ------------------------------ 85.2/376.0 MB 3.4 MB/s eta 0:01:25\n",
      "     -------- ------------------------------ 86.0/376.0 MB 3.4 MB/s eta 0:01:25\n",
      "     --------- ----------------------------- 86.8/376.0 MB 3.5 MB/s eta 0:01:24\n",
      "     --------- ----------------------------- 87.6/376.0 MB 3.5 MB/s eta 0:01:24\n",
      "     --------- ----------------------------- 88.3/376.0 MB 3.5 MB/s eta 0:01:24\n",
      "     --------- ----------------------------- 89.4/376.0 MB 3.5 MB/s eta 0:01:23\n",
      "     --------- ----------------------------- 89.9/376.0 MB 3.5 MB/s eta 0:01:23\n",
      "     --------- ----------------------------- 90.4/376.0 MB 3.5 MB/s eta 0:01:23\n",
      "     --------- ----------------------------- 91.0/376.0 MB 3.5 MB/s eta 0:01:23\n",
      "     --------- ----------------------------- 92.0/376.0 MB 3.5 MB/s eta 0:01:23\n",
      "     --------- ----------------------------- 92.5/376.0 MB 3.5 MB/s eta 0:01:22\n",
      "     --------- ----------------------------- 93.3/376.0 MB 3.5 MB/s eta 0:01:22\n",
      "     --------- ----------------------------- 94.4/376.0 MB 3.5 MB/s eta 0:01:22\n",
      "     --------- ----------------------------- 95.2/376.0 MB 3.5 MB/s eta 0:01:21\n",
      "     --------- ----------------------------- 95.9/376.0 MB 3.5 MB/s eta 0:01:21\n",
      "     ---------- ---------------------------- 96.7/376.0 MB 3.5 MB/s eta 0:01:21\n",
      "     ---------- ---------------------------- 97.3/376.0 MB 3.5 MB/s eta 0:01:21\n",
      "     ---------- ---------------------------- 98.0/376.0 MB 3.5 MB/s eta 0:01:20\n",
      "     ---------- ---------------------------- 98.8/376.0 MB 3.5 MB/s eta 0:01:20\n",
      "     ---------- ---------------------------- 99.6/376.0 MB 3.5 MB/s eta 0:01:20\n",
      "     ---------- --------------------------- 100.7/376.0 MB 3.5 MB/s eta 0:01:19\n",
      "     ---------- --------------------------- 101.4/376.0 MB 3.5 MB/s eta 0:01:19\n",
      "     ---------- --------------------------- 102.2/376.0 MB 3.5 MB/s eta 0:01:19\n",
      "     ---------- --------------------------- 103.0/376.0 MB 3.5 MB/s eta 0:01:18\n",
      "     ---------- --------------------------- 104.1/376.0 MB 3.5 MB/s eta 0:01:18\n",
      "     ---------- --------------------------- 104.9/376.0 MB 3.5 MB/s eta 0:01:18\n",
      "     ---------- --------------------------- 105.6/376.0 MB 3.5 MB/s eta 0:01:17\n",
      "     ---------- --------------------------- 106.4/376.0 MB 3.5 MB/s eta 0:01:17\n",
      "     ---------- --------------------------- 107.2/376.0 MB 3.5 MB/s eta 0:01:17\n",
      "     ---------- --------------------------- 107.7/376.0 MB 3.5 MB/s eta 0:01:16\n",
      "     ---------- --------------------------- 108.3/376.0 MB 3.5 MB/s eta 0:01:16\n",
      "     ---------- --------------------------- 108.8/376.0 MB 3.5 MB/s eta 0:01:16\n",
      "     ----------- -------------------------- 109.6/376.0 MB 3.5 MB/s eta 0:01:16\n",
      "     ----------- -------------------------- 110.4/376.0 MB 3.5 MB/s eta 0:01:15\n",
      "     ----------- -------------------------- 111.1/376.0 MB 3.5 MB/s eta 0:01:15\n",
      "     ----------- -------------------------- 111.9/376.0 MB 3.5 MB/s eta 0:01:15\n",
      "     ----------- -------------------------- 112.5/376.0 MB 3.5 MB/s eta 0:01:15\n",
      "     ----------- -------------------------- 113.2/376.0 MB 3.5 MB/s eta 0:01:15\n",
      "     ----------- -------------------------- 114.0/376.0 MB 3.5 MB/s eta 0:01:14\n",
      "     ----------- -------------------------- 115.1/376.0 MB 3.6 MB/s eta 0:01:14\n",
      "     ----------- -------------------------- 115.9/376.0 MB 3.6 MB/s eta 0:01:14\n",
      "     ----------- -------------------------- 116.4/376.0 MB 3.6 MB/s eta 0:01:14\n",
      "     ----------- -------------------------- 117.2/376.0 MB 3.6 MB/s eta 0:01:13\n",
      "     ----------- -------------------------- 118.0/376.0 MB 3.6 MB/s eta 0:01:13\n",
      "     ------------ ------------------------- 118.8/376.0 MB 3.6 MB/s eta 0:01:13\n",
      "     ------------ ------------------------- 119.3/376.0 MB 3.5 MB/s eta 0:01:13\n",
      "     ------------ ------------------------- 119.8/376.0 MB 3.5 MB/s eta 0:01:13\n",
      "     ------------ ------------------------- 120.8/376.0 MB 3.5 MB/s eta 0:01:12\n",
      "     ------------ ------------------------- 121.4/376.0 MB 3.5 MB/s eta 0:01:12\n",
      "     ------------ ------------------------- 122.2/376.0 MB 3.5 MB/s eta 0:01:12\n",
      "     ------------ ------------------------- 122.7/376.0 MB 3.5 MB/s eta 0:01:12\n",
      "     ------------ ------------------------- 123.5/376.0 MB 3.5 MB/s eta 0:01:12\n",
      "     ------------ ------------------------- 124.3/376.0 MB 3.5 MB/s eta 0:01:12\n",
      "     ------------ ------------------------- 125.0/376.0 MB 3.5 MB/s eta 0:01:11\n",
      "     ------------ ------------------------- 125.8/376.0 MB 3.5 MB/s eta 0:01:11\n",
      "     ------------ ------------------------- 126.4/376.0 MB 3.5 MB/s eta 0:01:11\n",
      "     ------------ ------------------------- 126.9/376.0 MB 3.5 MB/s eta 0:01:11\n",
      "     ------------ ------------------------- 127.7/376.0 MB 3.5 MB/s eta 0:01:11\n",
      "     ------------ ------------------------- 128.5/376.0 MB 3.5 MB/s eta 0:01:10\n",
      "     ------------- ------------------------ 129.2/376.0 MB 3.5 MB/s eta 0:01:10\n",
      "     ------------- ------------------------ 130.0/376.0 MB 3.5 MB/s eta 0:01:10\n",
      "     ------------- ------------------------ 130.8/376.0 MB 3.5 MB/s eta 0:01:10\n",
      "     ------------- ------------------------ 131.6/376.0 MB 3.5 MB/s eta 0:01:10\n",
      "     ------------- ------------------------ 132.4/376.0 MB 3.5 MB/s eta 0:01:09\n",
      "     ------------- ------------------------ 132.9/376.0 MB 3.5 MB/s eta 0:01:09\n",
      "     ------------- ------------------------ 133.7/376.0 MB 3.5 MB/s eta 0:01:09\n",
      "     ------------- ------------------------ 134.5/376.0 MB 3.5 MB/s eta 0:01:09\n",
      "     ------------- ------------------------ 135.0/376.0 MB 3.5 MB/s eta 0:01:09\n",
      "     ------------- ------------------------ 135.8/376.0 MB 3.5 MB/s eta 0:01:08\n",
      "     ------------- ------------------------ 136.6/376.0 MB 3.5 MB/s eta 0:01:08\n",
      "     ------------- ------------------------ 137.4/376.0 MB 3.6 MB/s eta 0:01:08\n",
      "     ------------- ------------------------ 137.9/376.0 MB 3.6 MB/s eta 0:01:07\n",
      "     -------------- ----------------------- 138.9/376.0 MB 3.6 MB/s eta 0:01:07\n",
      "     -------------- ----------------------- 139.7/376.0 MB 3.6 MB/s eta 0:01:07\n",
      "     -------------- ----------------------- 140.5/376.0 MB 3.6 MB/s eta 0:01:06\n",
      "     -------------- ----------------------- 141.3/376.0 MB 3.6 MB/s eta 0:01:06\n",
      "     -------------- ----------------------- 142.1/376.0 MB 3.6 MB/s eta 0:01:06\n",
      "     -------------- ----------------------- 142.9/376.0 MB 3.6 MB/s eta 0:01:05\n",
      "     -------------- ----------------------- 143.7/376.0 MB 3.6 MB/s eta 0:01:05\n",
      "     -------------- ----------------------- 144.4/376.0 MB 3.6 MB/s eta 0:01:05\n",
      "     -------------- ----------------------- 145.2/376.0 MB 3.6 MB/s eta 0:01:04\n",
      "     -------------- ----------------------- 145.5/376.0 MB 3.6 MB/s eta 0:01:04\n",
      "     -------------- ----------------------- 146.5/376.0 MB 3.6 MB/s eta 0:01:04\n",
      "     -------------- ----------------------- 147.3/376.0 MB 3.6 MB/s eta 0:01:04\n",
      "     -------------- ----------------------- 147.8/376.0 MB 3.6 MB/s eta 0:01:04\n",
      "     -------------- ----------------------- 148.4/376.0 MB 3.6 MB/s eta 0:01:04\n",
      "     --------------- ---------------------- 149.2/376.0 MB 3.6 MB/s eta 0:01:04\n",
      "     --------------- ---------------------- 149.9/376.0 MB 3.6 MB/s eta 0:01:03\n",
      "     --------------- ---------------------- 151.0/376.0 MB 3.6 MB/s eta 0:01:03\n",
      "     --------------- ---------------------- 151.5/376.0 MB 3.6 MB/s eta 0:01:03\n",
      "     --------------- ---------------------- 152.3/376.0 MB 3.6 MB/s eta 0:01:03\n",
      "     --------------- ---------------------- 153.1/376.0 MB 3.6 MB/s eta 0:01:03\n",
      "     --------------- ---------------------- 153.9/376.0 MB 3.6 MB/s eta 0:01:02\n",
      "     --------------- ---------------------- 154.7/376.0 MB 3.6 MB/s eta 0:01:02\n",
      "     --------------- ---------------------- 155.5/376.0 MB 3.6 MB/s eta 0:01:02\n",
      "     --------------- ---------------------- 156.5/376.0 MB 3.6 MB/s eta 0:01:01\n",
      "     --------------- ---------------------- 157.0/376.0 MB 3.6 MB/s eta 0:01:01\n",
      "     --------------- ---------------------- 158.1/376.0 MB 3.6 MB/s eta 0:01:01\n",
      "     ---------------- --------------------- 158.9/376.0 MB 3.6 MB/s eta 0:01:01\n",
      "     ---------------- --------------------- 159.6/376.0 MB 3.6 MB/s eta 0:01:00\n",
      "     ---------------- --------------------- 160.4/376.0 MB 3.6 MB/s eta 0:01:00\n",
      "     ---------------- --------------------- 161.2/376.0 MB 3.6 MB/s eta 0:01:00\n",
      "     ---------------- --------------------- 161.7/376.0 MB 3.6 MB/s eta 0:00:59\n",
      "     ---------------- --------------------- 162.8/376.0 MB 3.6 MB/s eta 0:00:59\n",
      "     ---------------- --------------------- 163.6/376.0 MB 3.6 MB/s eta 0:00:59\n",
      "     ---------------- --------------------- 164.1/376.0 MB 3.6 MB/s eta 0:00:59\n",
      "     ---------------- --------------------- 164.9/376.0 MB 3.6 MB/s eta 0:00:58\n",
      "     ---------------- --------------------- 165.7/376.0 MB 3.6 MB/s eta 0:00:58\n",
      "     ---------------- --------------------- 166.5/376.0 MB 3.6 MB/s eta 0:00:58\n",
      "     ---------------- --------------------- 167.2/376.0 MB 3.6 MB/s eta 0:00:58\n",
      "     ---------------- --------------------- 168.0/376.0 MB 3.6 MB/s eta 0:00:58\n",
      "     ----------------- -------------------- 168.8/376.0 MB 3.6 MB/s eta 0:00:57\n",
      "     ----------------- -------------------- 169.6/376.0 MB 3.6 MB/s eta 0:00:57\n",
      "     ----------------- -------------------- 170.4/376.0 MB 3.6 MB/s eta 0:00:57\n",
      "     ----------------- -------------------- 171.2/376.0 MB 3.7 MB/s eta 0:00:57\n",
      "     ----------------- -------------------- 172.0/376.0 MB 3.7 MB/s eta 0:00:56\n",
      "     ----------------- -------------------- 172.8/376.0 MB 3.7 MB/s eta 0:00:56\n",
      "     ----------------- -------------------- 173.5/376.0 MB 3.7 MB/s eta 0:00:56\n",
      "     ----------------- -------------------- 174.6/376.0 MB 3.7 MB/s eta 0:00:55\n",
      "     ----------------- -------------------- 175.1/376.0 MB 3.7 MB/s eta 0:00:55\n",
      "     ----------------- -------------------- 175.9/376.0 MB 3.7 MB/s eta 0:00:55\n",
      "     ----------------- -------------------- 176.7/376.0 MB 3.7 MB/s eta 0:00:55\n",
      "     ----------------- -------------------- 177.2/376.0 MB 3.7 MB/s eta 0:00:55\n",
      "     ----------------- -------------------- 178.0/376.0 MB 3.7 MB/s eta 0:00:55\n",
      "     ------------------ ------------------- 178.8/376.0 MB 3.7 MB/s eta 0:00:54\n",
      "     ------------------ ------------------- 179.6/376.0 MB 3.7 MB/s eta 0:00:54\n",
      "     ------------------ ------------------- 180.4/376.0 MB 3.7 MB/s eta 0:00:54\n",
      "     ------------------ ------------------- 181.4/376.0 MB 3.7 MB/s eta 0:00:54\n",
      "     ------------------ ------------------- 182.2/376.0 MB 3.7 MB/s eta 0:00:53\n",
      "     ------------------ ------------------- 183.0/376.0 MB 3.7 MB/s eta 0:00:53\n",
      "     ------------------ ------------------- 183.8/376.0 MB 3.7 MB/s eta 0:00:53\n",
      "     ------------------ ------------------- 184.5/376.0 MB 3.7 MB/s eta 0:00:53\n",
      "     ------------------ ------------------- 185.3/376.0 MB 3.7 MB/s eta 0:00:52\n",
      "     ------------------ ------------------- 185.9/376.0 MB 3.7 MB/s eta 0:00:52\n",
      "     ------------------ ------------------- 186.9/376.0 MB 3.7 MB/s eta 0:00:52\n",
      "     ------------------ ------------------- 187.7/376.0 MB 3.7 MB/s eta 0:00:52\n",
      "     ------------------- ------------------ 188.5/376.0 MB 3.7 MB/s eta 0:00:51\n",
      "     ------------------- ------------------ 189.3/376.0 MB 3.7 MB/s eta 0:00:51\n",
      "     ------------------- ------------------ 190.1/376.0 MB 3.7 MB/s eta 0:00:51\n",
      "     ------------------- ------------------ 190.8/376.0 MB 3.7 MB/s eta 0:00:51\n",
      "     ------------------- ------------------ 191.6/376.0 MB 3.7 MB/s eta 0:00:50\n",
      "     ------------------- ------------------ 192.4/376.0 MB 3.7 MB/s eta 0:00:50\n",
      "     ------------------- ------------------ 193.5/376.0 MB 3.7 MB/s eta 0:00:50\n",
      "     ------------------- ------------------ 194.2/376.0 MB 3.7 MB/s eta 0:00:50\n",
      "     ------------------- ------------------ 195.0/376.0 MB 3.7 MB/s eta 0:00:49\n",
      "     ------------------- ------------------ 195.8/376.0 MB 3.7 MB/s eta 0:00:49\n",
      "     ------------------- ------------------ 196.6/376.0 MB 3.7 MB/s eta 0:00:49\n",
      "     ------------------- ------------------ 197.7/376.0 MB 3.7 MB/s eta 0:00:49\n",
      "     -------------------- ----------------- 198.4/376.0 MB 3.7 MB/s eta 0:00:48\n",
      "     -------------------- ----------------- 199.2/376.0 MB 3.7 MB/s eta 0:00:48\n",
      "     -------------------- ----------------- 200.0/376.0 MB 3.7 MB/s eta 0:00:48\n",
      "     -------------------- ----------------- 200.5/376.0 MB 3.7 MB/s eta 0:00:48\n",
      "     -------------------- ----------------- 201.6/376.0 MB 3.7 MB/s eta 0:00:47\n",
      "     -------------------- ----------------- 202.4/376.0 MB 3.7 MB/s eta 0:00:47\n",
      "     -------------------- ----------------- 202.9/376.0 MB 3.7 MB/s eta 0:00:47\n",
      "     -------------------- ----------------- 203.4/376.0 MB 3.7 MB/s eta 0:00:47\n",
      "     -------------------- ----------------- 204.2/376.0 MB 3.7 MB/s eta 0:00:47\n",
      "     -------------------- ----------------- 204.7/376.0 MB 3.7 MB/s eta 0:00:47\n",
      "     -------------------- ----------------- 205.5/376.0 MB 3.7 MB/s eta 0:00:47\n",
      "     -------------------- ----------------- 206.3/376.0 MB 3.7 MB/s eta 0:00:46\n",
      "     -------------------- ----------------- 207.1/376.0 MB 3.7 MB/s eta 0:00:46\n",
      "     -------------------- ----------------- 207.6/376.0 MB 3.7 MB/s eta 0:00:46\n",
      "     -------------------- ----------------- 207.6/376.0 MB 3.7 MB/s eta 0:00:46\n",
      "     --------------------- ---------------- 208.4/376.0 MB 3.7 MB/s eta 0:00:46\n",
      "     --------------------- ---------------- 209.2/376.0 MB 3.7 MB/s eta 0:00:46\n",
      "     --------------------- ---------------- 209.7/376.0 MB 3.7 MB/s eta 0:00:46\n",
      "     --------------------- ---------------- 210.5/376.0 MB 3.6 MB/s eta 0:00:46\n",
      "     --------------------- ---------------- 211.3/376.0 MB 3.6 MB/s eta 0:00:46\n",
      "     --------------------- ---------------- 212.1/376.0 MB 3.6 MB/s eta 0:00:45\n",
      "     --------------------- ---------------- 212.9/376.0 MB 3.6 MB/s eta 0:00:45\n",
      "     --------------------- ---------------- 213.6/376.0 MB 3.6 MB/s eta 0:00:45\n",
      "     --------------------- ---------------- 214.7/376.0 MB 3.6 MB/s eta 0:00:45\n",
      "     --------------------- ---------------- 215.5/376.0 MB 3.6 MB/s eta 0:00:45\n",
      "     --------------------- ---------------- 216.3/376.0 MB 3.6 MB/s eta 0:00:44\n",
      "     --------------------- ---------------- 216.8/376.0 MB 3.6 MB/s eta 0:00:44\n",
      "     ---------------------- --------------- 217.8/376.0 MB 3.7 MB/s eta 0:00:44\n",
      "     ---------------------- --------------- 218.6/376.0 MB 3.7 MB/s eta 0:00:43\n",
      "     ---------------------- --------------- 219.4/376.0 MB 3.7 MB/s eta 0:00:43\n",
      "     ---------------------- --------------- 220.2/376.0 MB 3.7 MB/s eta 0:00:43\n",
      "     ---------------------- --------------- 221.0/376.0 MB 3.7 MB/s eta 0:00:43\n",
      "     ---------------------- --------------- 221.8/376.0 MB 3.7 MB/s eta 0:00:42\n",
      "     ---------------------- --------------- 222.8/376.0 MB 3.7 MB/s eta 0:00:42\n",
      "     ---------------------- --------------- 223.3/376.0 MB 3.7 MB/s eta 0:00:42\n",
      "     ---------------------- --------------- 224.4/376.0 MB 3.7 MB/s eta 0:00:42\n",
      "     ---------------------- --------------- 225.2/376.0 MB 3.7 MB/s eta 0:00:41\n",
      "     ---------------------- --------------- 226.0/376.0 MB 3.7 MB/s eta 0:00:41\n",
      "     ---------------------- --------------- 226.8/376.0 MB 3.7 MB/s eta 0:00:41\n",
      "     ----------------------- -------------- 227.8/376.0 MB 3.7 MB/s eta 0:00:41\n",
      "     ----------------------- -------------- 228.6/376.0 MB 3.7 MB/s eta 0:00:40\n",
      "     ----------------------- -------------- 229.6/376.0 MB 3.7 MB/s eta 0:00:40\n",
      "     ----------------------- -------------- 230.4/376.0 MB 3.7 MB/s eta 0:00:40\n",
      "     ----------------------- -------------- 230.9/376.0 MB 3.7 MB/s eta 0:00:39\n",
      "     ----------------------- -------------- 231.5/376.0 MB 3.7 MB/s eta 0:00:39\n",
      "     ----------------------- -------------- 232.5/376.0 MB 3.7 MB/s eta 0:00:39\n",
      "     ----------------------- -------------- 233.0/376.0 MB 3.7 MB/s eta 0:00:39\n",
      "     ----------------------- -------------- 234.1/376.0 MB 3.7 MB/s eta 0:00:39\n",
      "     ----------------------- -------------- 234.9/376.0 MB 3.7 MB/s eta 0:00:38\n",
      "     ----------------------- -------------- 235.7/376.0 MB 3.7 MB/s eta 0:00:38\n",
      "     ----------------------- -------------- 236.5/376.0 MB 3.7 MB/s eta 0:00:38\n",
      "     ----------------------- -------------- 237.2/376.0 MB 3.7 MB/s eta 0:00:38\n",
      "     ------------------------ ------------- 237.8/376.0 MB 3.7 MB/s eta 0:00:38\n",
      "     ------------------------ ------------- 238.8/376.0 MB 3.7 MB/s eta 0:00:37\n",
      "     ------------------------ ------------- 239.3/376.0 MB 3.7 MB/s eta 0:00:37\n",
      "     ------------------------ ------------- 239.9/376.0 MB 3.7 MB/s eta 0:00:37\n",
      "     ------------------------ ------------- 240.6/376.0 MB 3.7 MB/s eta 0:00:37\n",
      "     ------------------------ ------------- 241.4/376.0 MB 3.7 MB/s eta 0:00:37\n",
      "     ------------------------ ------------- 242.0/376.0 MB 3.7 MB/s eta 0:00:36\n",
      "     ------------------------ ------------- 243.3/376.0 MB 3.7 MB/s eta 0:00:36\n",
      "     ------------------------ ------------- 244.1/376.0 MB 3.7 MB/s eta 0:00:36\n",
      "     ------------------------ ------------- 245.1/376.0 MB 3.7 MB/s eta 0:00:35\n",
      "     ------------------------ ------------- 245.9/376.0 MB 3.7 MB/s eta 0:00:35\n",
      "     ------------------------ ------------- 246.7/376.0 MB 3.8 MB/s eta 0:00:35\n",
      "     ------------------------- ------------ 247.7/376.0 MB 3.8 MB/s eta 0:00:35\n",
      "     ------------------------- ------------ 248.5/376.0 MB 3.8 MB/s eta 0:00:34\n",
      "     ------------------------- ------------ 249.6/376.0 MB 3.8 MB/s eta 0:00:34\n",
      "     ------------------------- ------------ 250.3/376.0 MB 3.8 MB/s eta 0:00:34\n",
      "     ------------------------- ------------ 251.1/376.0 MB 3.8 MB/s eta 0:00:33\n",
      "     ------------------------- ------------ 251.7/376.0 MB 3.8 MB/s eta 0:00:33\n",
      "     ------------------------- ------------ 252.4/376.0 MB 3.8 MB/s eta 0:00:33\n",
      "     ------------------------- ------------ 253.0/376.0 MB 3.8 MB/s eta 0:00:33\n",
      "     ------------------------- ------------ 253.5/376.0 MB 3.8 MB/s eta 0:00:33\n",
      "     ------------------------- ------------ 254.3/376.0 MB 3.7 MB/s eta 0:00:33\n",
      "     ------------------------- ------------ 254.8/376.0 MB 3.7 MB/s eta 0:00:33\n",
      "     ------------------------- ------------ 255.6/376.0 MB 3.7 MB/s eta 0:00:33\n",
      "     ------------------------- ------------ 256.1/376.0 MB 3.7 MB/s eta 0:00:33\n",
      "     ------------------------- ------------ 256.9/376.0 MB 3.7 MB/s eta 0:00:32\n",
      "     -------------------------- ----------- 257.9/376.0 MB 3.7 MB/s eta 0:00:32\n",
      "     -------------------------- ----------- 258.7/376.0 MB 3.7 MB/s eta 0:00:32\n",
      "     -------------------------- ----------- 259.3/376.0 MB 3.7 MB/s eta 0:00:32\n",
      "     -------------------------- ----------- 260.0/376.0 MB 3.7 MB/s eta 0:00:31\n",
      "     -------------------------- ----------- 260.8/376.0 MB 3.7 MB/s eta 0:00:31\n",
      "     -------------------------- ----------- 261.6/376.0 MB 3.7 MB/s eta 0:00:31\n",
      "     -------------------------- ----------- 262.4/376.0 MB 3.7 MB/s eta 0:00:31\n",
      "     -------------------------- ----------- 263.2/376.0 MB 3.7 MB/s eta 0:00:31\n",
      "     -------------------------- ----------- 264.0/376.0 MB 3.7 MB/s eta 0:00:30\n",
      "     -------------------------- ----------- 264.8/376.0 MB 3.7 MB/s eta 0:00:30\n",
      "     -------------------------- ----------- 265.8/376.0 MB 3.8 MB/s eta 0:00:30\n",
      "     -------------------------- ----------- 266.9/376.0 MB 3.8 MB/s eta 0:00:29\n",
      "     --------------------------- ---------- 267.6/376.0 MB 3.8 MB/s eta 0:00:29\n",
      "     --------------------------- ---------- 268.7/376.0 MB 3.8 MB/s eta 0:00:29\n",
      "     --------------------------- ---------- 269.7/376.0 MB 3.8 MB/s eta 0:00:29\n",
      "     --------------------------- ---------- 270.8/376.0 MB 3.8 MB/s eta 0:00:28\n",
      "     --------------------------- ---------- 271.6/376.0 MB 3.8 MB/s eta 0:00:28\n",
      "     --------------------------- ---------- 272.6/376.0 MB 3.8 MB/s eta 0:00:28\n",
      "     --------------------------- ---------- 273.7/376.0 MB 3.8 MB/s eta 0:00:27\n",
      "     --------------------------- ---------- 274.7/376.0 MB 3.8 MB/s eta 0:00:27\n",
      "     --------------------------- ---------- 275.8/376.0 MB 3.8 MB/s eta 0:00:27\n",
      "     --------------------------- ---------- 276.6/376.0 MB 3.8 MB/s eta 0:00:27\n",
      "     ---------------------------- --------- 277.3/376.0 MB 3.8 MB/s eta 0:00:26\n",
      "     ---------------------------- --------- 278.4/376.0 MB 3.8 MB/s eta 0:00:26\n",
      "     ---------------------------- --------- 279.2/376.0 MB 3.8 MB/s eta 0:00:26\n",
      "     ---------------------------- --------- 280.2/376.0 MB 3.8 MB/s eta 0:00:25\n",
      "     ---------------------------- --------- 281.0/376.0 MB 3.8 MB/s eta 0:00:25\n",
      "     ---------------------------- --------- 282.1/376.0 MB 3.8 MB/s eta 0:00:25\n",
      "     ---------------------------- --------- 283.1/376.0 MB 3.9 MB/s eta 0:00:25\n",
      "     ---------------------------- --------- 284.2/376.0 MB 3.9 MB/s eta 0:00:24\n",
      "     ---------------------------- --------- 285.2/376.0 MB 3.9 MB/s eta 0:00:24\n",
      "     ---------------------------- --------- 286.0/376.0 MB 3.9 MB/s eta 0:00:24\n",
      "     ----------------------------- -------- 287.0/376.0 MB 3.9 MB/s eta 0:00:23\n",
      "     ----------------------------- -------- 288.1/376.0 MB 3.9 MB/s eta 0:00:23\n",
      "     ----------------------------- -------- 288.9/376.0 MB 3.9 MB/s eta 0:00:23\n",
      "     ----------------------------- -------- 289.9/376.0 MB 3.9 MB/s eta 0:00:23\n",
      "     ----------------------------- -------- 290.7/376.0 MB 3.9 MB/s eta 0:00:22\n",
      "     ----------------------------- -------- 291.8/376.0 MB 3.9 MB/s eta 0:00:22\n",
      "     ----------------------------- -------- 292.8/376.0 MB 3.9 MB/s eta 0:00:22\n",
      "     ----------------------------- -------- 293.9/376.0 MB 3.9 MB/s eta 0:00:21\n",
      "     ----------------------------- -------- 294.6/376.0 MB 3.9 MB/s eta 0:00:21\n",
      "     ----------------------------- -------- 295.7/376.0 MB 3.9 MB/s eta 0:00:21\n",
      "     ----------------------------- -------- 296.5/376.0 MB 3.9 MB/s eta 0:00:21\n",
      "     ------------------------------ ------- 297.5/376.0 MB 3.9 MB/s eta 0:00:20\n",
      "     ------------------------------ ------- 298.6/376.0 MB 4.0 MB/s eta 0:00:20\n",
      "     ------------------------------ ------- 299.6/376.0 MB 4.0 MB/s eta 0:00:20\n",
      "     ------------------------------ ------- 300.4/376.0 MB 4.0 MB/s eta 0:00:20\n",
      "     ------------------------------ ------- 301.5/376.0 MB 4.0 MB/s eta 0:00:19\n",
      "     ------------------------------ ------- 302.3/376.0 MB 4.0 MB/s eta 0:00:19\n",
      "     ------------------------------ ------- 303.0/376.0 MB 4.0 MB/s eta 0:00:19\n",
      "     ------------------------------ ------- 303.8/376.0 MB 4.0 MB/s eta 0:00:19\n",
      "     ------------------------------ ------- 304.6/376.0 MB 4.0 MB/s eta 0:00:18\n",
      "     ------------------------------ ------- 305.4/376.0 MB 4.0 MB/s eta 0:00:18\n",
      "     ------------------------------ ------- 306.2/376.0 MB 4.0 MB/s eta 0:00:18\n",
      "     ------------------------------- ------ 306.7/376.0 MB 4.0 MB/s eta 0:00:18\n",
      "     ------------------------------- ------ 307.5/376.0 MB 4.0 MB/s eta 0:00:18\n",
      "     ------------------------------- ------ 307.8/376.0 MB 3.9 MB/s eta 0:00:18\n",
      "     ------------------------------- ------ 308.8/376.0 MB 3.9 MB/s eta 0:00:18\n",
      "     ------------------------------- ------ 309.3/376.0 MB 3.9 MB/s eta 0:00:17\n",
      "     ------------------------------- ------ 310.4/376.0 MB 3.9 MB/s eta 0:00:17\n",
      "     ------------------------------- ------ 310.9/376.0 MB 3.9 MB/s eta 0:00:17\n",
      "     ------------------------------- ------ 312.0/376.0 MB 3.9 MB/s eta 0:00:17\n",
      "     ------------------------------- ------ 312.7/376.0 MB 3.9 MB/s eta 0:00:17\n",
      "     ------------------------------- ------ 313.3/376.0 MB 3.9 MB/s eta 0:00:16\n",
      "     ------------------------------- ------ 314.0/376.0 MB 3.9 MB/s eta 0:00:16\n",
      "     ------------------------------- ------ 315.1/376.0 MB 3.9 MB/s eta 0:00:16\n",
      "     ------------------------------- ------ 315.9/376.0 MB 3.9 MB/s eta 0:00:16\n",
      "     -------------------------------- ----- 316.7/376.0 MB 3.9 MB/s eta 0:00:16\n",
      "     -------------------------------- ----- 317.7/376.0 MB 3.9 MB/s eta 0:00:15\n",
      "     -------------------------------- ----- 318.5/376.0 MB 3.9 MB/s eta 0:00:15\n",
      "     -------------------------------- ----- 319.3/376.0 MB 3.9 MB/s eta 0:00:15\n",
      "     -------------------------------- ----- 320.1/376.0 MB 3.9 MB/s eta 0:00:15\n",
      "     -------------------------------- ----- 320.6/376.0 MB 3.9 MB/s eta 0:00:15\n",
      "     -------------------------------- ----- 321.4/376.0 MB 3.9 MB/s eta 0:00:14\n",
      "     -------------------------------- ----- 321.9/376.0 MB 3.9 MB/s eta 0:00:14\n",
      "     -------------------------------- ----- 323.0/376.0 MB 4.0 MB/s eta 0:00:14\n",
      "     -------------------------------- ----- 323.7/376.0 MB 4.0 MB/s eta 0:00:14\n",
      "     -------------------------------- ----- 324.8/376.0 MB 4.0 MB/s eta 0:00:13\n",
      "     -------------------------------- ----- 325.6/376.0 MB 4.0 MB/s eta 0:00:13\n",
      "     -------------------------------- ----- 326.4/376.0 MB 4.0 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 327.2/376.0 MB 4.0 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 327.9/376.0 MB 4.0 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 328.7/376.0 MB 4.0 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 329.5/376.0 MB 4.0 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 329.8/376.0 MB 4.0 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 330.3/376.0 MB 4.0 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 330.6/376.0 MB 4.0 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 330.8/376.0 MB 4.0 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 331.1/376.0 MB 3.9 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 331.1/376.0 MB 3.9 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 331.4/376.0 MB 3.9 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 331.6/376.0 MB 3.9 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 331.6/376.0 MB 3.9 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 331.9/376.0 MB 3.8 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 332.1/376.0 MB 3.8 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 332.1/376.0 MB 3.8 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 332.4/376.0 MB 3.8 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 332.7/376.0 MB 3.7 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 332.7/376.0 MB 3.7 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 332.7/376.0 MB 3.7 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 332.9/376.0 MB 3.6 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 332.9/376.0 MB 3.6 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 333.2/376.0 MB 3.6 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 333.4/376.0 MB 3.6 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 333.4/376.0 MB 3.6 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 333.4/376.0 MB 3.6 MB/s eta 0:00:12\n",
      "     --------------------------------- ---- 333.7/376.0 MB 3.5 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 333.7/376.0 MB 3.5 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 333.7/376.0 MB 3.5 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 334.0/376.0 MB 3.4 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 334.2/376.0 MB 3.4 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 334.2/376.0 MB 3.4 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 334.2/376.0 MB 3.4 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 334.5/376.0 MB 3.3 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 334.5/376.0 MB 3.3 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 334.8/376.0 MB 3.3 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 334.8/376.0 MB 3.3 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 334.8/376.0 MB 3.3 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 335.0/376.0 MB 3.2 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 335.3/376.0 MB 3.2 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 335.5/376.0 MB 3.2 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 335.8/376.0 MB 3.2 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 336.1/376.0 MB 3.2 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 336.1/376.0 MB 3.2 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 336.1/376.0 MB 3.2 MB/s eta 0:00:13\n",
      "     --------------------------------- ---- 336.3/376.0 MB 3.1 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 336.6/376.0 MB 3.1 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 336.9/376.0 MB 3.0 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 337.4/376.0 MB 3.0 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 337.9/376.0 MB 3.0 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 338.2/376.0 MB 3.0 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 338.2/376.0 MB 3.0 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 338.7/376.0 MB 3.0 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 338.7/376.0 MB 3.0 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 339.2/376.0 MB 2.9 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 339.5/376.0 MB 2.9 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 339.5/376.0 MB 2.9 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 339.7/376.0 MB 2.9 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 340.0/376.0 MB 2.9 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 340.3/376.0 MB 2.9 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 340.5/376.0 MB 2.8 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 340.8/376.0 MB 2.8 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 340.8/376.0 MB 2.8 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 341.0/376.0 MB 2.8 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 341.6/376.0 MB 2.8 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 341.6/376.0 MB 2.8 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 341.8/376.0 MB 2.7 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 342.1/376.0 MB 2.7 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 342.4/376.0 MB 2.7 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 342.6/376.0 MB 2.7 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 342.9/376.0 MB 2.7 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 342.9/376.0 MB 2.7 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 342.9/376.0 MB 2.7 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 342.9/376.0 MB 2.7 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 342.9/376.0 MB 2.7 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 343.1/376.0 MB 2.5 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 343.1/376.0 MB 2.5 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 343.1/376.0 MB 2.5 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 343.1/376.0 MB 2.5 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 343.1/376.0 MB 2.5 MB/s eta 0:00:13\n",
      "     ---------------------------------- --- 343.4/376.0 MB 2.4 MB/s eta 0:00:14\n",
      "     ---------------------------------- --- 343.7/376.0 MB 2.3 MB/s eta 0:00:14\n",
      "     ---------------------------------- --- 343.7/376.0 MB 2.3 MB/s eta 0:00:14\n",
      "     ---------------------------------- --- 343.7/376.0 MB 2.3 MB/s eta 0:00:14\n",
      "     ---------------------------------- --- 343.7/376.0 MB 2.3 MB/s eta 0:00:14\n",
      "     ---------------------------------- --- 343.7/376.0 MB 2.3 MB/s eta 0:00:14\n",
      "     ---------------------------------- --- 343.7/376.0 MB 2.3 MB/s eta 0:00:14\n",
      "     ---------------------------------- --- 343.9/376.0 MB 2.2 MB/s eta 0:00:15\n",
      "     ---------------------------------- --- 343.9/376.0 MB 2.2 MB/s eta 0:00:15\n",
      "     ---------------------------------- --- 343.9/376.0 MB 2.2 MB/s eta 0:00:15\n",
      "     ---------------------------------- --- 343.9/376.0 MB 2.2 MB/s eta 0:00:15\n",
      "     ---------------------------------- --- 344.2/376.0 MB 2.0 MB/s eta 0:00:16\n",
      "     ---------------------------------- --- 344.2/376.0 MB 2.0 MB/s eta 0:00:16\n",
      "     ---------------------------------- --- 344.5/376.0 MB 2.0 MB/s eta 0:00:16\n",
      "     ---------------------------------- --- 344.5/376.0 MB 2.0 MB/s eta 0:00:16\n",
      "     ---------------------------------- --- 344.5/376.0 MB 2.0 MB/s eta 0:00:16\n",
      "     ---------------------------------- --- 344.5/376.0 MB 2.0 MB/s eta 0:00:16\n",
      "     ---------------------------------- --- 344.7/376.0 MB 1.9 MB/s eta 0:00:17\n",
      "     ---------------------------------- --- 344.7/376.0 MB 1.9 MB/s eta 0:00:17\n",
      "     ---------------------------------- --- 344.7/376.0 MB 1.9 MB/s eta 0:00:17\n",
      "     ---------------------------------- --- 345.0/376.0 MB 1.8 MB/s eta 0:00:18\n",
      "     ---------------------------------- --- 345.2/376.0 MB 1.8 MB/s eta 0:00:18\n",
      "     ---------------------------------- --- 345.8/376.0 MB 1.7 MB/s eta 0:00:18\n",
      "     ---------------------------------- --- 345.8/376.0 MB 1.7 MB/s eta 0:00:18\n",
      "     ---------------------------------- --- 346.0/376.0 MB 1.7 MB/s eta 0:00:18\n",
      "     ----------------------------------- -- 346.3/376.0 MB 1.7 MB/s eta 0:00:18\n",
      "     ----------------------------------- -- 346.6/376.0 MB 1.6 MB/s eta 0:00:19\n",
      "     ----------------------------------- -- 346.8/376.0 MB 1.6 MB/s eta 0:00:19\n",
      "     ----------------------------------- -- 347.1/376.0 MB 1.6 MB/s eta 0:00:19\n",
      "     ----------------------------------- -- 347.1/376.0 MB 1.6 MB/s eta 0:00:19\n",
      "     ----------------------------------- -- 347.3/376.0 MB 1.5 MB/s eta 0:00:19\n",
      "     ----------------------------------- -- 347.6/376.0 MB 1.5 MB/s eta 0:00:19\n",
      "     ----------------------------------- -- 347.6/376.0 MB 1.5 MB/s eta 0:00:19\n",
      "     ----------------------------------- -- 347.9/376.0 MB 1.5 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 348.1/376.0 MB 1.4 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 348.1/376.0 MB 1.4 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 348.7/376.0 MB 1.4 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 348.9/376.0 MB 1.4 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 349.2/376.0 MB 1.4 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 349.4/376.0 MB 1.4 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 349.7/376.0 MB 1.4 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 350.0/376.0 MB 1.3 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 350.5/376.0 MB 1.3 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 350.7/376.0 MB 1.3 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 351.0/376.0 MB 1.3 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 351.3/376.0 MB 1.3 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 351.5/376.0 MB 1.3 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 351.8/376.0 MB 1.2 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 352.1/376.0 MB 1.2 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 352.3/376.0 MB 1.2 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 352.8/376.0 MB 1.2 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 353.1/376.0 MB 1.2 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 353.4/376.0 MB 1.1 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 353.6/376.0 MB 1.1 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 353.9/376.0 MB 1.1 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 354.4/376.0 MB 1.1 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 354.4/376.0 MB 1.1 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 354.7/376.0 MB 1.0 MB/s eta 0:00:21\n",
      "     ----------------------------------- -- 355.2/376.0 MB 1.0 MB/s eta 0:00:20\n",
      "     ----------------------------------- -- 355.5/376.0 MB 1.0 MB/s eta 0:00:21\n",
      "     ----------------------------------- -- 356.0/376.0 MB 1.0 MB/s eta 0:00:20\n",
      "     ---------------------------------- - 356.3/376.0 MB 997.7 kB/s eta 0:00:20\n",
      "     ---------------------------------- - 356.8/376.0 MB 978.7 kB/s eta 0:00:20\n",
      "     ---------------------------------- - 357.0/376.0 MB 979.2 kB/s eta 0:00:20\n",
      "     ---------------------------------- - 357.3/376.0 MB 943.7 kB/s eta 0:00:20\n",
      "     ---------------------------------- - 357.8/376.0 MB 938.4 kB/s eta 0:00:20\n",
      "     ---------------------------------- - 358.4/376.0 MB 945.7 kB/s eta 0:00:19\n",
      "     ---------------------------------- - 358.9/376.0 MB 948.7 kB/s eta 0:00:19\n",
      "     ---------------------------------- - 359.9/376.0 MB 970.5 kB/s eta 0:00:17\n",
      "     ---------------------------------- - 360.4/376.0 MB 985.9 kB/s eta 0:00:16\n",
      "     ------------------------------------ - 361.2/376.0 MB 1.0 MB/s eta 0:00:15\n",
      "     ------------------------------------ - 362.0/376.0 MB 1.0 MB/s eta 0:00:14\n",
      "     ------------------------------------ - 363.1/376.0 MB 1.1 MB/s eta 0:00:13\n",
      "     ------------------------------------ - 364.1/376.0 MB 1.1 MB/s eta 0:00:11\n",
      "     ------------------------------------ - 364.9/376.0 MB 1.1 MB/s eta 0:00:11\n",
      "     ------------------------------------ - 365.7/376.0 MB 1.1 MB/s eta 0:00:10\n",
      "     -------------------------------------  366.5/376.0 MB 1.1 MB/s eta 0:00:09\n",
      "     -------------------------------------  367.3/376.0 MB 1.2 MB/s eta 0:00:08\n",
      "     -------------------------------------  368.1/376.0 MB 1.2 MB/s eta 0:00:07\n",
      "     -------------------------------------  368.6/376.0 MB 1.2 MB/s eta 0:00:07\n",
      "     -------------------------------------  369.4/376.0 MB 1.2 MB/s eta 0:00:06\n",
      "     -------------------------------------  370.1/376.0 MB 1.2 MB/s eta 0:00:05\n",
      "     -------------------------------------  371.2/376.0 MB 1.3 MB/s eta 0:00:04\n",
      "     -------------------------------------  371.7/376.0 MB 1.3 MB/s eta 0:00:04\n",
      "     -------------------------------------  372.5/376.0 MB 1.3 MB/s eta 0:00:03\n",
      "     -------------------------------------  373.3/376.0 MB 1.3 MB/s eta 0:00:02\n",
      "     -------------------------------------  374.1/376.0 MB 1.4 MB/s eta 0:00:02\n",
      "     -------------------------------------  374.9/376.0 MB 1.4 MB/s eta 0:00:01\n",
      "     -------------------------------------  375.7/376.0 MB 1.4 MB/s eta 0:00:01\n",
      "     -------------------------------------  375.9/376.0 MB 1.4 MB/s eta 0:00:01\n",
      "     -------------------------------------  375.9/376.0 MB 1.4 MB/s eta 0:00:01\n",
      "     -------------------------------------  375.9/376.0 MB 1.4 MB/s eta 0:00:01\n",
      "     -------------------------------------- 376.0/376.0 MB 1.4 MB/s eta 0:00:00\n",
      "Collecting absl-py>=1.0.0 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl (133 kB)\n",
      "Collecting astunparse>=1.6.0 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/2b/03/13dde6512ad7b4557eb792fbcf0c653af6076b81e5941d36ec61f7ce6028/astunparse-1.6.3-py2.py3-none-any.whl (12 kB)\n",
      "Collecting flatbuffers>=24.3.25 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/b8/25/155f9f080d5e4bc0082edfda032ea2bc2b8fab3f4d25d46c1e9dd22a1a89/flatbuffers-25.2.10-py2.py3-none-any.whl (30 kB)\n",
      "Collecting gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/a3/61/8001b38461d751cd1a0c3a6ae84346796a5758123f3ed97a1b121dfbf4f3/gast-0.6.0-py3-none-any.whl (21 kB)\n",
      "Collecting google-pasta>=0.1.1 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/a3/de/c648ef6835192e6e2cc03f40b19eeda4382c49b5bafb43d88b931c4c74ac/google_pasta-0.2.0-py3-none-any.whl (57 kB)\n",
      "Collecting libclang>=13.0.0 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/0b/2d/3f480b1e1d31eb3d6de5e3ef641954e5c67430d5ac93b7fa7e07589576c7/libclang-18.1.1-py2.py3-none-win_amd64.whl (26.4 MB)\n",
      "     ---------------------------------------- 0.0/26.4 MB ? eta -:--:--\n",
      "      --------------------------------------- 0.5/26.4 MB 4.2 MB/s eta 0:00:07\n",
      "     - -------------------------------------- 1.3/26.4 MB 4.0 MB/s eta 0:00:07\n",
      "     --- ------------------------------------ 2.1/26.4 MB 3.5 MB/s eta 0:00:08\n",
      "     ---- ----------------------------------- 2.9/26.4 MB 3.6 MB/s eta 0:00:07\n",
      "     ----- ---------------------------------- 3.7/26.4 MB 3.6 MB/s eta 0:00:07\n",
      "     ------ --------------------------------- 4.5/26.4 MB 3.5 MB/s eta 0:00:07\n",
      "     ------- -------------------------------- 5.2/26.4 MB 3.6 MB/s eta 0:00:06\n",
      "     --------- ------------------------------ 6.0/26.4 MB 3.6 MB/s eta 0:00:06\n",
      "     --------- ------------------------------ 6.3/26.4 MB 3.7 MB/s eta 0:00:06\n",
      "     ----------- ---------------------------- 7.3/26.4 MB 3.6 MB/s eta 0:00:06\n",
      "     ------------ --------------------------- 8.1/26.4 MB 3.6 MB/s eta 0:00:06\n",
      "     ------------- -------------------------- 8.9/26.4 MB 3.6 MB/s eta 0:00:05\n",
      "     -------------- ------------------------- 9.7/26.4 MB 3.6 MB/s eta 0:00:05\n",
      "     --------------- ------------------------ 10.5/26.4 MB 3.6 MB/s eta 0:00:05\n",
      "     ----------------- ---------------------- 11.3/26.4 MB 3.7 MB/s eta 0:00:05\n",
      "     ------------------ --------------------- 12.1/26.4 MB 3.6 MB/s eta 0:00:04\n",
      "     ------------------- -------------------- 13.1/26.4 MB 3.7 MB/s eta 0:00:04\n",
      "     --------------------- ------------------ 13.9/26.4 MB 3.7 MB/s eta 0:00:04\n",
      "     ---------------------- ----------------- 14.7/26.4 MB 3.7 MB/s eta 0:00:04\n",
      "     ----------------------- ---------------- 15.5/26.4 MB 3.7 MB/s eta 0:00:03\n",
      "     ------------------------ --------------- 16.3/26.4 MB 3.8 MB/s eta 0:00:03\n",
      "     -------------------------- ------------- 17.3/26.4 MB 3.8 MB/s eta 0:00:03\n",
      "     -------------------------- ------------- 17.6/26.4 MB 3.8 MB/s eta 0:00:03\n",
      "     ---------------------------- ----------- 18.6/26.4 MB 3.7 MB/s eta 0:00:03\n",
      "     ----------------------------- ---------- 19.4/26.4 MB 3.7 MB/s eta 0:00:02\n",
      "     ------------------------------ --------- 20.2/26.4 MB 3.7 MB/s eta 0:00:02\n",
      "     ------------------------------- -------- 21.0/26.4 MB 3.7 MB/s eta 0:00:02\n",
      "     -------------------------------- ------- 21.8/26.4 MB 3.7 MB/s eta 0:00:02\n",
      "     --------------------------------- ------ 22.3/26.4 MB 3.7 MB/s eta 0:00:02\n",
      "     ---------------------------------- ----- 23.1/26.4 MB 3.7 MB/s eta 0:00:01\n",
      "     ------------------------------------ --- 23.9/26.4 MB 3.7 MB/s eta 0:00:01\n",
      "     ------------------------------------- -- 24.6/26.4 MB 3.7 MB/s eta 0:00:01\n",
      "     -------------------------------------- - 25.4/26.4 MB 3.7 MB/s eta 0:00:01\n",
      "     ---------------------------------------  26.2/26.4 MB 3.7 MB/s eta 0:00:01\n",
      "     ---------------------------------------- 26.4/26.4 MB 3.7 MB/s eta 0:00:00\n",
      "Collecting opt-einsum>=2.3.2 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl (71 kB)\n",
      "Requirement already satisfied: packaging in c:\\users\\75713\\venv\\lib\\site-packages (from tensorflow) (24.2)\n",
      "Collecting protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0dev,>=3.20.3 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/61/fa/aae8e10512b83de633f2646506a6d835b151edf4b30d18d73afd01447253/protobuf-5.29.3-cp310-abi3-win_amd64.whl (434 kB)\n",
      "Requirement already satisfied: requests<3,>=2.21.0 in c:\\users\\75713\\venv\\lib\\site-packages (from tensorflow) (2.32.3)\n",
      "Requirement already satisfied: setuptools in c:\\users\\75713\\venv\\lib\\site-packages (from tensorflow) (75.8.0)\n",
      "Requirement already satisfied: six>=1.12.0 in c:\\users\\75713\\venv\\lib\\site-packages (from tensorflow) (1.17.0)\n",
      "Collecting termcolor>=1.1.0 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/7f/be/df630c387a0a054815d60be6a97eb4e8f17385d5d6fe660e1c02750062b4/termcolor-2.5.0-py3-none-any.whl (7.8 kB)\n",
      "Requirement already satisfied: typing-extensions>=3.6.6 in c:\\users\\75713\\venv\\lib\\site-packages (from tensorflow) (4.12.2)\n",
      "Collecting wrapt>=1.11.0 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/15/06/1dbf478ea45c03e78a6a8c4be4fdc3c3bddea5c8de8a93bc971415e47f0f/wrapt-1.17.2-cp312-cp312-win_amd64.whl (38 kB)\n",
      "Collecting grpcio<2.0,>=1.24.3 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/fd/7c/1e429c5fb26122055d10ff9a1d754790fb067d83c633ff69eddcf8e3614b/grpcio-1.71.0-cp312-cp312-win_amd64.whl (4.3 MB)\n",
      "     ---------------------------------------- 0.0/4.3 MB ? eta -:--:--\n",
      "     ---- ----------------------------------- 0.5/4.3 MB 4.2 MB/s eta 0:00:01\n",
      "     ------------ --------------------------- 1.3/4.3 MB 3.5 MB/s eta 0:00:01\n",
      "     ------------------- -------------------- 2.1/4.3 MB 3.6 MB/s eta 0:00:01\n",
      "     ------------------------ --------------- 2.6/4.3 MB 3.4 MB/s eta 0:00:01\n",
      "     ------------------------------- -------- 3.4/4.3 MB 3.4 MB/s eta 0:00:01\n",
      "     ---------------------------------------- 4.3/4.3 MB 3.5 MB/s eta 0:00:00\n",
      "Collecting tensorboard~=2.19.0 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/5d/12/4f70e8e2ba0dbe72ea978429d8530b0333f0ed2140cc571a48802878ef99/tensorboard-2.19.0-py3-none-any.whl (5.5 MB)\n",
      "     ---------------------------------------- 0.0/5.5 MB ? eta -:--:--\n",
      "     --- ------------------------------------ 0.5/5.5 MB 4.2 MB/s eta 0:00:02\n",
      "     --------- ------------------------------ 1.3/5.5 MB 3.9 MB/s eta 0:00:02\n",
      "     ------------- -------------------------- 1.8/5.5 MB 3.5 MB/s eta 0:00:02\n",
      "     ------------------- -------------------- 2.6/5.5 MB 3.5 MB/s eta 0:00:01\n",
      "     -------------------------- ------------- 3.7/5.5 MB 3.6 MB/s eta 0:00:01\n",
      "     ------------------------------ --------- 4.2/5.5 MB 3.5 MB/s eta 0:00:01\n",
      "     ------------------------------------ --- 5.0/5.5 MB 3.6 MB/s eta 0:00:01\n",
      "     ---------------------------------------- 5.5/5.5 MB 3.4 MB/s eta 0:00:00\n",
      "Collecting keras>=3.5.0 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/2b/98/e81c6b2cb522f0eadcc8e16f3cabaccd5462bff6cf52194acfed4a031d3f/keras-3.9.0-py3-none-any.whl (1.3 MB)\n",
      "     ---------------------------------------- 0.0/1.3 MB ? eta -:--:--\n",
      "     --------------- ------------------------ 0.5/1.3 MB 4.2 MB/s eta 0:00:01\n",
      "     ---------------------------------------  1.3/1.3 MB 3.2 MB/s eta 0:00:01\n",
      "     ---------------------------------------- 1.3/1.3 MB 3.0 MB/s eta 0:00:00\n",
      "Requirement already satisfied: numpy<2.2.0,>=1.26.0 in c:\\users\\75713\\venv\\lib\\site-packages (from tensorflow) (1.26.4)\n",
      "Collecting h5py>=3.11.0 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/25/61/d897952629cae131c19d4c41b2521e7dd6382f2d7177c87615c2e6dced1a/h5py-3.13.0-cp312-cp312-win_amd64.whl (3.0 MB)\n",
      "     ---------------------------------------- 0.0/3.0 MB ? eta -:--:--\n",
      "     ------- -------------------------------- 0.5/3.0 MB 2.1 MB/s eta 0:00:02\n",
      "     -------------- ------------------------- 1.0/3.0 MB 2.5 MB/s eta 0:00:01\n",
      "     --------------------- ------------------ 1.6/3.0 MB 2.6 MB/s eta 0:00:01\n",
      "     ----------------------------------- ---- 2.6/3.0 MB 3.1 MB/s eta 0:00:01\n",
      "     ---------------------------------------- 3.0/3.0 MB 3.1 MB/s eta 0:00:00\n",
      "Collecting ml-dtypes<1.0.0,>=0.5.1 (from tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/38/bc/c4260e4a6c6bf684d0313308de1c860467275221d5e7daf69b3fcddfdd0b/ml_dtypes-0.5.1-cp312-cp312-win_amd64.whl (210 kB)\n",
      "Collecting wheel<1.0,>=0.23.0 (from astunparse>=1.6.0->tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl (72 kB)\n",
      "Collecting rich (from keras>=3.5.0->tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl (242 kB)\n",
      "Collecting namex (from keras>=3.5.0->tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/73/59/7854fbfb59f8ae35483ce93493708be5942ebb6328cd85b3a609df629736/namex-0.0.8-py3-none-any.whl (5.8 kB)\n",
      "Collecting optree (from keras>=3.5.0->tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/5d/fa/c1dc4f40a83f5df6c16cc3ff89890712dd95caf320641f635ddbe5a11102/optree-0.14.1-cp312-cp312-win_amd64.whl (306 kB)\n",
      "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\75713\\venv\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow) (3.4.1)\n",
      "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\75713\\venv\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow) (3.10)\n",
      "Requirement already satisfied: urllib3<3,>=1.21.1 in c:\\users\\75713\\venv\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow) (2.3.0)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\75713\\venv\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow) (2025.1.31)\n",
      "Collecting markdown>=2.6.8 (from tensorboard~=2.19.0->tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/3f/08/83871f3c50fc983b88547c196d11cf8c3340e37c32d2e9d6152abe2c61f7/Markdown-3.7-py3-none-any.whl (106 kB)\n",
      "Collecting tensorboard-data-server<0.8.0,>=0.7.0 (from tensorboard~=2.19.0->tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/7a/13/e503968fefabd4c6b2650af21e110aa8466fe21432cd7c43a84577a89438/tensorboard_data_server-0.7.2-py3-none-any.whl (2.4 kB)\n",
      "Collecting werkzeug>=1.0.1 (from tensorboard~=2.19.0->tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl (224 kB)\n",
      "Requirement already satisfied: MarkupSafe>=2.1.1 in c:\\users\\75713\\venv\\lib\\site-packages (from werkzeug>=1.0.1->tensorboard~=2.19.0->tensorflow) (3.0.2)\n",
      "Collecting markdown-it-py>=2.2.0 (from rich->keras>=3.5.0->tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n",
      "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\\users\\75713\\venv\\lib\\site-packages (from rich->keras>=3.5.0->tensorflow) (2.19.1)\n",
      "Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich->keras>=3.5.0->tensorflow)\n",
      "  Downloading https://mirrors.aliyun.com/pypi/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n",
      "Installing collected packages: namex, libclang, flatbuffers, wrapt, wheel, werkzeug, termcolor, tensorboard-data-server, protobuf, optree, opt-einsum, ml-dtypes, mdurl, markdown, h5py, grpcio, google-pasta, gast, absl-py, tensorboard, markdown-it-py, astunparse, rich, keras, tensorflow\n",
      "Successfully installed absl-py-2.1.0 astunparse-1.6.3 flatbuffers-25.2.10 gast-0.6.0 google-pasta-0.2.0 grpcio-1.71.0 h5py-3.13.0 keras-3.9.0 libclang-18.1.1 markdown-3.7 markdown-it-py-3.0.0 mdurl-0.1.2 ml-dtypes-0.5.1 namex-0.0.8 opt-einsum-3.4.0 optree-0.14.1 protobuf-5.29.3 rich-13.9.4 tensorboard-2.19.0 tensorboard-data-server-0.7.2 tensorflow-2.19.0 termcolor-2.5.0 werkzeug-3.1.3 wheel-0.45.1 wrapt-1.17.2\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:29:54.560116Z",
     "iopub.status.busy": "2025-01-23T07:29:54.559818Z",
     "iopub.status.idle": "2025-01-23T07:35:45.302283Z",
     "shell.execute_reply": "2025-01-23T07:35:45.301746Z",
     "shell.execute_reply.started": "2025-01-23T07:29:54.560093Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:45.519782Z",
     "start_time": "2025-03-13T11:30:28.635948Z"
    }
   },
   "source": [
    "from tensorflow import keras\n",
    "#用karas有的数据集imdb，电影分类,分电影是积极的，还是消极的\n",
    "imdb = keras.datasets.imdb\n",
    "#载入数据使用下面两个参数\n",
    "vocab_size = 10000  #词典大小，仅保留训练数据中前10000个最经常出现的单词，低频单词被舍弃\n",
    "index_from = 3  #0,1,2,3空出来做别的事\n",
    "#前一万个词出现词频最高的会保留下来进行处理，后面的作为特殊字符处理，\n",
    "# 小于3的id都是特殊字符，下面代码有写\n",
    "# 需要注意的一点是取出来的词表还是从1开始的，需要做处理\n",
    "(train_data, train_labels), (test_data, test_labels) = imdb.load_data(\n",
    "    num_words = vocab_size, index_from = index_from)"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/imdb.npz\n",
      "\u001B[1m17464789/17464789\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m8s\u001B[0m 0us/step\n"
     ]
    }
   ],
   "execution_count": 3
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:45.303689Z",
     "iopub.status.busy": "2025-01-23T07:35:45.303325Z",
     "iopub.status.idle": "2025-01-23T07:35:45.306973Z",
     "shell.execute_reply": "2025-01-23T07:35:45.306509Z",
     "shell.execute_reply.started": "2025-01-23T07:35:45.303669Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:45.524306Z",
     "start_time": "2025-03-13T11:30:45.520787Z"
    }
   },
   "source": [
    "print(\"train\", train_data.shape, train_labels.shape)\n",
    "print(\"test\", test_data.shape, test_labels.shape)"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train (25000,) (25000,)\n",
      "test (25000,) (25000,)\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:45.308369Z",
     "iopub.status.busy": "2025-01-23T07:35:45.308173Z",
     "iopub.status.idle": "2025-01-23T07:35:51.559237Z",
     "shell.execute_reply": "2025-01-23T07:35:51.558733Z",
     "shell.execute_reply.started": "2025-01-23T07:35:45.308349Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:49.005144Z",
     "start_time": "2025-03-13T11:30:45.525315Z"
    }
   },
   "source": [
    "#载入词表，看下词表长度，词表就像英语字典\n",
    "word_index = imdb.get_word_index()\n",
    "print(len(word_index))\n",
    "print(type(word_index))\n",
    "#词表虽然有8万多，但是我们只载入了最高频的1万词！！！！"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/imdb_word_index.json\n",
      "\u001B[1m1641221/1641221\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m3s\u001B[0m 2us/step\n",
      "88584\n",
      "<class 'dict'>\n"
     ]
    }
   ],
   "execution_count": 5
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 构造 word2idx 和 idx2word"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:51.560035Z",
     "iopub.status.busy": "2025-01-23T07:35:51.559852Z",
     "iopub.status.idle": "2025-01-23T07:35:51.589030Z",
     "shell.execute_reply": "2025-01-23T07:35:51.588422Z",
     "shell.execute_reply.started": "2025-01-23T07:35:51.560016Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:49.035799Z",
     "start_time": "2025-03-13T11:30:49.005144Z"
    }
   },
   "source": [
    "word2idx = {word: idx + 3 for word, idx in word_index.items()}\n",
    "word2idx.update({\n",
    "    \"[PAD]\": 0,     # 填充 token\n",
    "    \"[BOS]\": 1,     # begin of sentence\n",
    "    \"[UNK]\": 2,     # 未知 token\n",
    "    \"[EOS]\": 3,     # end of sentence\n",
    "})\n",
    "\n",
    "idx2word = {idx: word for word, idx in word2idx.items()}"
   ],
   "outputs": [],
   "execution_count": 6
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:51.590090Z",
     "iopub.status.busy": "2025-01-23T07:35:51.589645Z",
     "iopub.status.idle": "2025-01-23T07:35:52.854243Z",
     "shell.execute_reply": "2025-01-23T07:35:52.853731Z",
     "shell.execute_reply.started": "2025-01-23T07:35:51.590069Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:50.167108Z",
     "start_time": "2025-03-13T11:30:49.037153Z"
    }
   },
   "source": [
    "# 选择 max_length\n",
    "length_collect = {}\n",
    "for text in train_data:\n",
    "    length = len(text)\n",
    "    length_collect[length] = length_collect.get(length, 0) + 1\n",
    "    \n",
    "MAX_LENGTH = 500\n",
    "plt.bar(length_collect.keys(), length_collect.values())\n",
    "plt.axvline(MAX_LENGTH, label=\"max length\", c=\"gray\", ls=\":\")\n",
    "plt.legend()\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 7
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Tokenizer"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:52.855066Z",
     "iopub.status.busy": "2025-01-23T07:35:52.854875Z",
     "iopub.status.idle": "2025-01-23T07:35:52.890572Z",
     "shell.execute_reply": "2025-01-23T07:35:52.890119Z",
     "shell.execute_reply.started": "2025-01-23T07:35:52.855047Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:50.204293Z",
     "start_time": "2025-03-13T11:30:50.168460Z"
    }
   },
   "source": [
    "class Tokenizer:\n",
    "    def __init__(self, word2idx, idx2word, max_length=500, pad_idx=0, bos_idx=1, eos_idx=3, unk_idx=2):\n",
    "        self.word2idx = word2idx\n",
    "        self.idx2word = idx2word\n",
    "        self.max_length = max_length\n",
    "        self.pad_idx = pad_idx\n",
    "        self.bos_idx = bos_idx\n",
    "        self.eos_idx = eos_idx\n",
    "        self.unk_idx = unk_idx\n",
    "    \n",
    "    def encode(self, text_list, padding_first=False):\n",
    "        \"\"\"如果padding_first == True，则padding加载前面，否则加载后面\"\"\"\n",
    "        max_length = min(self.max_length, 2 + max([len(text) for text in text_list]))\n",
    "        indices_list = []\n",
    "        for text in text_list:\n",
    "            indices = [self.bos_idx] + [self.word2idx.get(word, self.unk_idx) for word in text[:max_length-2]] + [self.eos_idx] #直接切片取前max_length-2个单词，然后加上bos和eos\n",
    "            if padding_first:\n",
    "                indices = [self.pad_idx] * (max_length - len(indices)) + indices\n",
    "            else:\n",
    "                indices = indices + [self.pad_idx] * (max_length - len(indices))\n",
    "            indices_list.append(indices)\n",
    "        return torch.tensor(indices_list)\n",
    "    \n",
    "    \n",
    "    def decode(self, indices_list, remove_bos=True, remove_eos=True, remove_pad=True, split=False):\n",
    "        text_list = []\n",
    "        for indices in indices_list:\n",
    "            text = []\n",
    "            for index in indices:\n",
    "                word = self.idx2word.get(index, \"[UNK]\")\n",
    "                if remove_bos and word == \"[BOS]\":\n",
    "                    continue\n",
    "                if remove_eos and word == \"[EOS]\":\n",
    "                    break\n",
    "                if remove_pad and word == \"[PAD]\":\n",
    "                    break\n",
    "                text.append(word)\n",
    "            text_list.append(\" \".join(text) if not split else text)\n",
    "        return text_list\n",
    "    \n",
    "\n",
    "tokenizer = Tokenizer(word2idx=word2idx, idx2word=idx2word)\n",
    "raw_text = [\"hello world\".split(), \"tokenize text datas with batch\".split(), \"this is a test\".split()]\n",
    "indices = tokenizer.encode(raw_text, padding_first=True)\n",
    "decode_text = tokenizer.decode(indices.tolist(), remove_bos=False, remove_eos=False, remove_pad=False)\n",
    "print(\"raw text\")\n",
    "for raw in raw_text:\n",
    "    print(raw)\n",
    "print(\"indices\")\n",
    "for index in indices:\n",
    "    print(index)\n",
    "print(\"decode text\")\n",
    "for decode in decode_text:\n",
    "    print(decode)"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "raw text\n",
      "['hello', 'world']\n",
      "['tokenize', 'text', 'datas', 'with', 'batch']\n",
      "['this', 'is', 'a', 'test']\n",
      "indices\n",
      "tensor([   0,    0,    0,    1, 4825,  182,    3])\n",
      "tensor([    1,     2,  3004,     2,    19, 19233,     3])\n",
      "tensor([   0,    1,   14,    9,    6, 2181,    3])\n",
      "decode text\n",
      "[PAD] [PAD] [PAD] [BOS] hello world [EOS]\n",
      "[BOS] [UNK] text [UNK] with batch [EOS]\n",
      "[PAD] [BOS] this is a test [EOS]\n"
     ]
    }
   ],
   "execution_count": 8
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:52.891234Z",
     "iopub.status.busy": "2025-01-23T07:35:52.891063Z",
     "iopub.status.idle": "2025-01-23T07:35:52.895190Z",
     "shell.execute_reply": "2025-01-23T07:35:52.894734Z",
     "shell.execute_reply.started": "2025-01-23T07:35:52.891215Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:50.209919Z",
     "start_time": "2025-03-13T11:30:50.205434Z"
    }
   },
   "source": [
    "# 看看训练集的数据\n",
    "\n",
    "tokenizer.decode(train_data[:2], remove_bos=False, remove_eos=False, remove_pad=False)"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[\"[BOS] this film was just brilliant casting location scenery story direction everyone's really suited the part they played and you could just imagine being there robert [UNK] is an amazing actor and now the same being director [UNK] father came from the same scottish island as myself so i loved the fact there was a real connection with this film the witty remarks throughout the film were great it was just brilliant so much that i bought the film as soon as it was released for [UNK] and would recommend it to everyone to watch and the fly fishing was amazing really cried at the end it was so sad and you know what they say if you cry at a film it must have been good and this definitely was also [UNK] to the two little boy's that played the [UNK] of norman and paul they were just brilliant children are often left out of the [UNK] list i think because the stars that play them all grown up are such a big profile for the whole film but these children are amazing and should be praised for what they have done don't you think the whole story was so lovely because it was true and was someone's life after all that was shared with us all\",\n",
       " \"[BOS] big hair big boobs bad music and a giant safety pin these are the words to best describe this terrible movie i love cheesy horror movies and i've seen hundreds but this had got to be on of the worst ever made the plot is paper thin and ridiculous the acting is an abomination the script is completely laughable the best is the end showdown with the cop and how he worked out who the killer is it's just so damn terribly written the clothes are sickening and funny in equal [UNK] the hair is big lots of boobs [UNK] men wear those cut [UNK] shirts that show off their [UNK] sickening that men actually wore them and the music is just [UNK] trash that plays over and over again in almost every scene there is trashy music boobs and [UNK] taking away bodies and the gym still doesn't close for [UNK] all joking aside this is a truly bad film whose only charm is to look back on the disaster that was the 80's and have a good old laugh at how bad everything was back then\"]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 9
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据集与 DataLoader"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:52.896104Z",
     "iopub.status.busy": "2025-01-23T07:35:52.895822Z",
     "iopub.status.idle": "2025-01-23T07:35:56.193733Z",
     "shell.execute_reply": "2025-01-23T07:35:56.193207Z",
     "shell.execute_reply.started": "2025-01-23T07:35:52.896084Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:51.893058Z",
     "start_time": "2025-03-13T11:30:50.211086Z"
    }
   },
   "source": [
    "from torch.utils.data import Dataset, DataLoader\n",
    "\n",
    "class IMDBDataset(Dataset):\n",
    "    def __init__(self, data, labels, remain_length=True):\n",
    "        if remain_length:\n",
    "            self.data = tokenizer.decode(data, remove_bos=False, remove_eos=False, remove_pad=False)\n",
    "        else:\n",
    "            # 缩减一下数据\n",
    "            self.data = tokenizer.decode(data)\n",
    "        self.labels = labels\n",
    "    \n",
    "    def __getitem__(self, index):\n",
    "        text = self.data[index]\n",
    "        label = self.labels[index]\n",
    "        return text, label\n",
    "    \n",
    "    def __len__(self):\n",
    "        return len(self.data)\n",
    "    \n",
    "    \n",
    "def collate_fct(batch):\n",
    "    text_list = [item[0].split() for item in batch]\n",
    "    label_list = [item[1] for item in batch]\n",
    "    # 这里使用 padding first\n",
    "    text_list = tokenizer.encode(text_list, padding_first=True).to(dtype=torch.int)\n",
    "    return text_list, torch.tensor(label_list).reshape(-1, 1).to(dtype=torch.float)\n",
    "\n",
    "\n",
    "# 用RNN，缩短序列长度\n",
    "train_ds = IMDBDataset(train_data, train_labels, remain_length=False)\n",
    "test_ds = IMDBDataset(test_data, test_labels, remain_length=False)"
   ],
   "outputs": [],
   "execution_count": 10
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.196049Z",
     "iopub.status.busy": "2025-01-23T07:35:56.195624Z",
     "iopub.status.idle": "2025-01-23T07:35:56.199003Z",
     "shell.execute_reply": "2025-01-23T07:35:56.198565Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.196029Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:51.897709Z",
     "start_time": "2025-03-13T11:30:51.894065Z"
    }
   },
   "source": [
    "batch_size = 128\n",
    "train_dl = DataLoader(train_ds, batch_size=batch_size, shuffle=True, collate_fn=collate_fct)\n",
    "test_dl = DataLoader(test_ds, batch_size=batch_size, shuffle=False, collate_fn=collate_fct)"
   ],
   "outputs": [],
   "execution_count": 11
  },
  {
   "cell_type": "code",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.199854Z",
     "iopub.status.busy": "2025-01-23T07:35:56.199670Z",
     "iopub.status.idle": "2025-01-23T07:35:56.239784Z",
     "shell.execute_reply": "2025-01-23T07:35:56.239261Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.199836Z"
    },
    "jupyter": {
     "outputs_hidden": false
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:51.941266Z",
     "start_time": "2025-03-13T11:30:51.897709Z"
    }
   },
   "source": [
    "for text, label in train_dl:\n",
    "    print(text.shape, label.shape)\n",
    "    break"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([128, 500]) torch.Size([128, 1])\n"
     ]
    }
   ],
   "execution_count": 12
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 定义模型"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.240561Z",
     "iopub.status.busy": "2025-01-23T07:35:56.240373Z",
     "iopub.status.idle": "2025-01-23T07:35:56.249061Z",
     "shell.execute_reply": "2025-01-23T07:35:56.248627Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.240542Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:51.955739Z",
     "start_time": "2025-03-13T11:30:51.942274Z"
    }
   },
   "source": [
    "class RNN(nn.Module):\n",
    "    def __init__(self, embedding_dim=16, hidden_dim=64, vocab_size=vocab_size, num_layers=1, bidirectional=False):\n",
    "        super(RNN, self).__init__()\n",
    "        self.embeding = nn.Embedding(vocab_size, embedding_dim)\n",
    "        self.rnn = nn.RNN(embedding_dim, hidden_dim, num_layers=num_layers, batch_first=True, bidirectional=bidirectional)\n",
    "        self.layer = nn.Linear(hidden_dim * (2 if bidirectional else 1), hidden_dim)\n",
    "        self.fc = nn.Linear(hidden_dim, 1)\n",
    "        \n",
    "    def forward(self, x):\n",
    "        # [bs, seq length]\n",
    "        x = self.embeding(x)\n",
    "        # [bs, seq length, embedding_dim] -> shape [bs, embedding_dim, seq length]\n",
    "        seq_output, final_hidden = self.rnn(x)\n",
    "        # print(f'seq_output.shape={seq_output.shape}')\n",
    "        # print(f'final_hidden.shape={final_hidden.shape}')\n",
    "        # [bs, seq length, hidden_dim], [*, bs, hidden_dim]\n",
    "        x = seq_output[:, -1, :]\n",
    "        # 取最后一个时间步的输出 (这也是为什么要设置padding_first=True的原因)\n",
    "        x = self.layer(x)\n",
    "        x = self.fc(x)\n",
    "        return x\n",
    "    \n",
    "\n",
    "    \n",
    "print(\"{:=^80}\".format(\" 一层单向 RNN \"))       \n",
    "for key, value in RNN().named_parameters():\n",
    "    print(f\"{key:^40}paramerters num: {np.prod(value.shape)}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=================================== 一层单向 RNN ===================================\n",
      "            embeding.weight             paramerters num: 160000\n",
      "            rnn.weight_ih_l0            paramerters num: 1024\n",
      "            rnn.weight_hh_l0            paramerters num: 4096\n",
      "             rnn.bias_ih_l0             paramerters num: 64\n",
      "             rnn.bias_hh_l0             paramerters num: 64\n",
      "              layer.weight              paramerters num: 4096\n",
      "               layer.bias               paramerters num: 64\n",
      "               fc.weight                paramerters num: 64\n",
      "                fc.bias                 paramerters num: 1\n"
     ]
    }
   ],
   "execution_count": 13
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.249936Z",
     "iopub.status.busy": "2025-01-23T07:35:56.249557Z",
     "iopub.status.idle": "2025-01-23T07:35:56.305655Z",
     "shell.execute_reply": "2025-01-23T07:35:56.305241Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.249916Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:52.005619Z",
     "start_time": "2025-03-13T11:30:51.958882Z"
    }
   },
   "source": [
    "#做前向计算，看下输出的shape\n",
    "model = RNN()  \n",
    "sample_inputs = torch.randint(0, vocab_size, (1, 500))\n",
    "model(sample_inputs).shape"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([1, 1])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 14
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.306505Z",
     "iopub.status.busy": "2025-01-23T07:35:56.306139Z",
     "iopub.status.idle": "2025-01-23T07:35:56.309478Z",
     "shell.execute_reply": "2025-01-23T07:35:56.309008Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.306486Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:52.010643Z",
     "start_time": "2025-03-13T11:30:52.006623Z"
    }
   },
   "source": [
    "64*64"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4096"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 15
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.310313Z",
     "iopub.status.busy": "2025-01-23T07:35:56.309966Z",
     "iopub.status.idle": "2025-01-23T07:35:56.312405Z",
     "shell.execute_reply": "2025-01-23T07:35:56.311992Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.310295Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:52.017956Z",
     "start_time": "2025-03-13T11:30:52.011647Z"
    }
   },
   "source": [
    "# print(\"{:=^80}\".format(\" 一层双向 RNN \"))       \n",
    "# for key, value in RNN(bidirectional=True).named_parameters():\n",
    "#     print(f\"{key:^40}paramerters num: {np.prod(value.shape)}\")\n",
    "# \n",
    "#     \n",
    "# print(\"{:=^80}\".format(\" 俩层单向 RNN \"))       \n",
    "# for key, value in RNN(num_layers=2).named_parameters():\n",
    "#     print(f\"{key:^40}paramerters num: {np.prod(value.shape)}\")"
   ],
   "outputs": [],
   "execution_count": 16
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 训练"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.313012Z",
     "iopub.status.busy": "2025-01-23T07:35:56.312850Z",
     "iopub.status.idle": "2025-01-23T07:35:56.418014Z",
     "shell.execute_reply": "2025-01-23T07:35:56.417563Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.312994Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:52.118687Z",
     "start_time": "2025-03-13T11:30:52.018961Z"
    }
   },
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "@torch.no_grad()\n",
    "def evaluating(model, dataloader, loss_fct):\n",
    "    loss_list = []\n",
    "    pred_list = []\n",
    "    label_list = []\n",
    "    for datas, labels in dataloader:\n",
    "        datas = datas.to(device)\n",
    "        labels = labels.to(device)\n",
    "        # 前向计算\n",
    "        logits = model(datas)\n",
    "        loss = loss_fct(logits, labels)         # 验证集损失\n",
    "        loss_list.append(loss.item())\n",
    "        # 二分类\n",
    "        preds = logits > 0\n",
    "        pred_list.extend(preds.cpu().numpy().tolist())\n",
    "        label_list.extend(labels.cpu().numpy().tolist())\n",
    "        \n",
    "    acc = accuracy_score(label_list, pred_list)\n",
    "    return np.mean(loss_list), acc\n"
   ],
   "outputs": [],
   "execution_count": 17
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### TensorBoard 可视化\n",
    "\n",
    "\n",
    "训练过程中可以使用如下命令启动tensorboard服务。\n",
    "\n",
    "```shell\n",
    "tensorboard \\\n",
    "    --logdir=runs \\     # log 存放路径\n",
    "    --host 0.0.0.0 \\    # ip\n",
    "    --port 8848         # 端口\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.419025Z",
     "iopub.status.busy": "2025-01-23T07:35:56.418548Z",
     "iopub.status.idle": "2025-01-23T07:35:56.559217Z",
     "shell.execute_reply": "2025-01-23T07:35:56.558785Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.419005Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:52.254886Z",
     "start_time": "2025-03-13T11:30:52.119691Z"
    }
   },
   "source": [
    "from torch.utils.tensorboard import SummaryWriter\n",
    "\n",
    "\n",
    "class TensorBoardCallback:\n",
    "    def __init__(self, log_dir, flush_secs=10):\n",
    "        \"\"\"\n",
    "        Args:\n",
    "            log_dir (str): dir to write log.\n",
    "            flush_secs (int, optional): write to dsk each flush_secs seconds. Defaults to 10.\n",
    "        \"\"\"\n",
    "        self.writer = SummaryWriter(log_dir=log_dir, flush_secs=flush_secs)\n",
    "\n",
    "    def draw_model(self, model, input_shape):\n",
    "        self.writer.add_graph(model, input_to_model=torch.randn(input_shape))\n",
    "        \n",
    "    def add_loss_scalars(self, step, loss, val_loss):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/loss\", \n",
    "            tag_scalar_dict={\"loss\": loss, \"val_loss\": val_loss},\n",
    "            global_step=step,\n",
    "            )\n",
    "        \n",
    "    def add_acc_scalars(self, step, acc, val_acc):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/accuracy\",\n",
    "            tag_scalar_dict={\"accuracy\": acc, \"val_accuracy\": val_acc},\n",
    "            global_step=step,\n",
    "        )\n",
    "        \n",
    "    def add_lr_scalars(self, step, learning_rate):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/learning_rate\",\n",
    "            tag_scalar_dict={\"learning_rate\": learning_rate},\n",
    "            global_step=step,\n",
    "            \n",
    "        )\n",
    "    \n",
    "    def __call__(self, step, **kwargs):\n",
    "        # add loss\n",
    "        loss = kwargs.pop(\"loss\", None)\n",
    "        val_loss = kwargs.pop(\"val_loss\", None)\n",
    "        if loss is not None and val_loss is not None:\n",
    "            self.add_loss_scalars(step, loss, val_loss)\n",
    "        # add acc\n",
    "        acc = kwargs.pop(\"acc\", None)\n",
    "        val_acc = kwargs.pop(\"val_acc\", None)\n",
    "        if acc is not None and val_acc is not None:\n",
    "            self.add_acc_scalars(step, acc, val_acc)\n",
    "        # add lr\n",
    "        learning_rate = kwargs.pop(\"lr\", None)\n",
    "        if learning_rate is not None:\n",
    "            self.add_lr_scalars(step, learning_rate)\n"
   ],
   "outputs": [],
   "execution_count": 18
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Save Best\n"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.560120Z",
     "iopub.status.busy": "2025-01-23T07:35:56.559748Z",
     "iopub.status.idle": "2025-01-23T07:35:56.564773Z",
     "shell.execute_reply": "2025-01-23T07:35:56.564281Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.560101Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:52.260348Z",
     "start_time": "2025-03-13T11:30:52.255892Z"
    }
   },
   "source": [
    "class SaveCheckpointsCallback:\n",
    "    def __init__(self, save_dir, save_step=5000, save_best_only=True):\n",
    "        \"\"\"\n",
    "        Save checkpoints each save_epoch epoch. \n",
    "        We save checkpoint by epoch in this implementation.\n",
    "        Usually, training scripts with pytorch evaluating model and save checkpoint by step.\n",
    "\n",
    "        Args:\n",
    "            save_dir (str): dir to save checkpoint\n",
    "            save_epoch (int, optional): the frequency to save checkpoint. Defaults to 1.\n",
    "            save_best_only (bool, optional): If True, only save the best model or save each model at every epoch.\n",
    "        \"\"\"\n",
    "        self.save_dir = save_dir\n",
    "        self.save_step = save_step\n",
    "        self.save_best_only = save_best_only\n",
    "        self.best_metrics = -1\n",
    "        \n",
    "        # mkdir\n",
    "        if not os.path.exists(self.save_dir):\n",
    "            os.mkdir(self.save_dir)\n",
    "        \n",
    "    def __call__(self, step, state_dict, metric=None):\n",
    "        if step % self.save_step > 0:\n",
    "            return\n",
    "        \n",
    "        if self.save_best_only:\n",
    "            assert metric is not None\n",
    "            if metric >= self.best_metrics:\n",
    "                # save checkpoints\n",
    "                torch.save(state_dict, os.path.join(self.save_dir, \"best.ckpt\"))\n",
    "                # update best metrics\n",
    "                self.best_metrics = metric\n",
    "        else:\n",
    "            torch.save(state_dict, os.path.join(self.save_dir, f\"{step}.ckpt\"))\n",
    "\n"
   ],
   "outputs": [],
   "execution_count": 19
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Early Stop"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.565759Z",
     "iopub.status.busy": "2025-01-23T07:35:56.565308Z",
     "iopub.status.idle": "2025-01-23T07:35:56.569498Z",
     "shell.execute_reply": "2025-01-23T07:35:56.569050Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.565738Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:30:52.268409Z",
     "start_time": "2025-03-13T11:30:52.260348Z"
    }
   },
   "source": [
    "class EarlyStopCallback:\n",
    "    def __init__(self, patience=5, min_delta=0.01):\n",
    "        \"\"\"\n",
    "\n",
    "        Args:\n",
    "            patience (int, optional): Number of epochs with no improvement after which training will be stopped.. Defaults to 5.\n",
    "            min_delta (float, optional): Minimum change in the monitored quantity to qualify as an improvement, i.e. an absolute \n",
    "                change of less than min_delta, will count as no improvement. Defaults to 0.01.\n",
    "        \"\"\"\n",
    "        self.patience = patience\n",
    "        self.min_delta = min_delta\n",
    "        self.best_metric = -1\n",
    "        self.counter = 0\n",
    "        \n",
    "    def __call__(self, metric):\n",
    "        if metric >= self.best_metric + self.min_delta:\n",
    "            # update best metric\n",
    "            self.best_metric = metric\n",
    "            # reset counter \n",
    "            self.counter = 0\n",
    "        else: \n",
    "            self.counter += 1\n",
    "            \n",
    "    @property\n",
    "    def early_stop(self):\n",
    "        return self.counter >= self.patience\n"
   ],
   "outputs": [],
   "execution_count": 20
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "execution": {
     "iopub.execute_input": "2025-01-23T07:48:40.262148Z",
     "iopub.status.busy": "2025-01-23T07:48:40.261735Z",
     "iopub.status.idle": "2025-01-23T07:51:27.123148Z",
     "shell.execute_reply": "2025-01-23T07:51:27.122658Z",
     "shell.execute_reply.started": "2025-01-23T07:48:40.262123Z"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-03-13T11:34:36.968064Z",
     "start_time": "2025-03-13T11:30:52.269412Z"
    }
   },
   "source": [
    "# 训练\n",
    "def training(\n",
    "    model, \n",
    "    train_loader, \n",
    "    val_loader, \n",
    "    epoch, \n",
    "    loss_fct, \n",
    "    optimizer, \n",
    "    tensorboard_callback=None,\n",
    "    save_ckpt_callback=None,\n",
    "    early_stop_callback=None,\n",
    "    eval_step=500,\n",
    "    ):\n",
    "    record_dict = {\n",
    "        \"train\": [],\n",
    "        \"val\": []\n",
    "    }\n",
    "    \n",
    "    global_step = 0\n",
    "    model.train()\n",
    "    with tqdm(total=epoch * len(train_loader)) as pbar:\n",
    "        for epoch_id in range(epoch):\n",
    "            # training\n",
    "            for datas, labels in train_loader:\n",
    "                datas = datas.to(device)\n",
    "                labels = labels.to(device)\n",
    "                # 梯度清空\n",
    "                optimizer.zero_grad()\n",
    "                # 模型前向计算\n",
    "                logits = model(datas)\n",
    "                # 计算损失\n",
    "                loss = loss_fct(logits, labels)\n",
    "                # 梯度回传\n",
    "                loss.backward()\n",
    "                # 调整优化器，包括学习率的变动等\n",
    "                optimizer.step()\n",
    "                preds = logits > 0\n",
    "            \n",
    "                acc = accuracy_score(labels.cpu().numpy(), preds.cpu().numpy())    \n",
    "                loss = loss.cpu().item()\n",
    "                # record\n",
    "                \n",
    "                record_dict[\"train\"].append({\n",
    "                    \"loss\": loss, \"acc\": acc, \"step\": global_step\n",
    "                })\n",
    "                \n",
    "                # evaluating\n",
    "                if global_step % eval_step == 0:\n",
    "                    model.eval()\n",
    "                    val_loss, val_acc = evaluating(model, val_loader, loss_fct)\n",
    "                    record_dict[\"val\"].append({\n",
    "                        \"loss\": val_loss, \"acc\": val_acc, \"step\": global_step\n",
    "                    })\n",
    "                    model.train()\n",
    "                    \n",
    "                    # 1. 使用 tensorboard 可视化\n",
    "                    if tensorboard_callback is not None:\n",
    "                        tensorboard_callback(\n",
    "                            global_step, \n",
    "                            loss=loss, val_loss=val_loss,\n",
    "                            acc=acc, val_acc=val_acc,\n",
    "                            lr=optimizer.param_groups[0][\"lr\"],\n",
    "                            )\n",
    "                \n",
    "                    # 2. 保存模型权重 save model checkpoint\n",
    "                    if save_ckpt_callback is not None:\n",
    "                        save_ckpt_callback(global_step, model.state_dict(), metric=val_acc)\n",
    "\n",
    "                    # 3. 早停 Early Stop\n",
    "                    if early_stop_callback is not None:\n",
    "                        early_stop_callback(val_acc)\n",
    "                        if early_stop_callback.early_stop:\n",
    "                            print(f\"Early stop at epoch {epoch_id} / global_step {global_step}\")\n",
    "                            return record_dict\n",
    "                    \n",
    "                # udate step\n",
    "                global_step += 1\n",
    "                pbar.update(1)\n",
    "                pbar.set_postfix({\"epoch\": epoch_id})\n",
    "        \n",
    "    return record_dict\n",
    "        \n",
    "\n",
    "epoch = 20\n",
    "\n",
    "# model = RNN(bidirectional=True) #双向单层\n",
    "model = RNN(num_layers=2)\n",
    "# model = RNN()\n",
    "# 1. 定义损失函数 采用交叉熵损失 (但是二分类)\n",
    "loss_fct = F.binary_cross_entropy_with_logits\n",
    "# 2. 定义优化器 采用 adam\n",
    "# Optimizers specified in the torch.optim package\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=0.001)\n",
    "\n",
    "# 1. tensorboard 可视化\n",
    "if not os.path.exists(\"runs\"):\n",
    "    os.mkdir(\"runs\")\n",
    "tensorboard_callback = TensorBoardCallback(\"runs/imdb-rnn\")\n",
    "# tensorboard_callback.draw_model(model, [1, MAX_LENGTH])\n",
    "# 2. save best\n",
    "if not os.path.exists(\"checkpoints\"):\n",
    "    os.makedirs(\"checkpoints\")\n",
    "save_ckpt_callback = SaveCheckpointsCallback(\"checkpoints/imdb-rnn\", save_step=len(train_dl), save_best_only=True)\n",
    "# 3. early stop\n",
    "early_stop_callback = EarlyStopCallback(patience=10)\n",
    "\n",
    "model = model.to(device)\n",
    "record = training(\n",
    "    model, \n",
    "    train_dl, \n",
    "    test_dl, \n",
    "    epoch, \n",
    "    loss_fct, \n",
    "    optimizer, \n",
    "    tensorboard_callback=tensorboard_callback,\n",
    "    save_ckpt_callback=save_ckpt_callback,\n",
    "    early_stop_callback=early_stop_callback,\n",
    "    eval_step=len(train_dl)\n",
    "    )"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "  0%|          | 0/3920 [00:00<?, ?it/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "131b3540fac34bfbb673d1e326a0f318"
      }
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 21
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:51:27.124289Z",
     "iopub.status.busy": "2025-01-23T07:51:27.124039Z",
     "iopub.status.idle": "2025-01-23T07:51:27.327899Z",
     "shell.execute_reply": "2025-01-23T07:51:27.327360Z",
     "shell.execute_reply.started": "2025-01-23T07:51:27.124267Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-13T11:34:37.178422Z",
     "start_time": "2025-03-13T11:34:36.969069Z"
    }
   },
   "source": [
    "#画线要注意的是损失是不一定在零到1之间的\n",
    "def plot_learning_curves(record_dict, sample_step=500):\n",
    "    # build DataFrame\n",
    "    train_df = pd.DataFrame(record_dict[\"train\"]).set_index(\"step\").iloc[::sample_step]\n",
    "    val_df = pd.DataFrame(record_dict[\"val\"]).set_index(\"step\")\n",
    "\n",
    "    # plot\n",
    "    fig_num = len(train_df.columns)\n",
    "    fig, axs = plt.subplots(1, fig_num, figsize=(5 * fig_num, 5))\n",
    "    for idx, item in enumerate(train_df.columns):    \n",
    "        axs[idx].plot(train_df.index, train_df[item], label=f\"train_{item}\")\n",
    "        axs[idx].plot(val_df.index, val_df[item], label=f\"val_{item}\")\n",
    "        axs[idx].grid()\n",
    "        axs[idx].legend()\n",
    "        # axs[idx].set_xticks(range(0, train_df.index[-1], 5000))\n",
    "        # axs[idx].set_xticklabels(map(lambda x: f\"{int(x/1000)}k\", range(0, train_df.index[-1], 5000)))\n",
    "        axs[idx].set_xlabel(\"step\")\n",
    "    \n",
    "    plt.show()\n",
    "\n",
    "plot_learning_curves(record, sample_step=10)  #横坐标是 steps"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 22
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 评估"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:51:27.328975Z",
     "iopub.status.busy": "2025-01-23T07:51:27.328505Z",
     "iopub.status.idle": "2025-01-23T07:51:31.051557Z",
     "shell.execute_reply": "2025-01-23T07:51:31.051010Z",
     "shell.execute_reply.started": "2025-01-23T07:51:27.328951Z"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-03-13T11:34:42.699044Z",
     "start_time": "2025-03-13T11:34:37.179431Z"
    }
   },
   "source": [
    "# dataload for evaluating\n",
    "\n",
    "# load checkpoints\n",
    "model.load_state_dict(torch.load(\"checkpoints/imdb-rnn/best.ckpt\", map_location=\"cpu\"))\n",
    "\n",
    "model.eval()\n",
    "loss, acc = evaluating(model, test_dl, loss_fct)\n",
    "print(f\"loss:     {loss:.4f}\\naccuracy: {acc:.4f}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss:     0.5007\n",
      "accuracy: 0.7596\n"
     ]
    }
   ],
   "execution_count": 23
  }
 ],
 "metadata": {
  "kaggle": {
   "accelerator": "gpu",
   "dataSources": [],
   "dockerImageVersionId": 30616,
   "isGpuEnabled": true,
   "isInternetEnabled": true,
   "language": "python",
   "sourceType": "notebook"
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
